Java Sqlite-错误:尚未针对SQLITE实现功能



我在java中创建了以下类,以使使用sqlite在我代码时更容易。

import java.sql.*;
public class Dbm {
//We want to use the connection througout the whole class so it is
//provided as a class level private variable
private Connection c = null;
//This constructor openes or creates the database provided by the arguement
//NameOfDatabase
public Dbm(String NameOfDatabase){
try {
  //Database is checked for in project folder, if doesnt exist then creates database
  c = DriverManager.getConnection("jdbc:sqlite:" + NameOfDatabase);
} catch ( Exception e ) {
  System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  System.exit(0);
}
System.out.println("Opened database successfully");
}
public void CloseDB(){
try{
c.close();
System.out.println("Closed Database Successfull");
}
catch (Exception e){
System.out.println("Failed to close Database due to error: " + e.getMessage());
}
}
 public void ExecuteNoReturnQuery(String SqlCommand){
//creates a statment to execute the query
try{
    Statement stmt = null;
stmt = c.createStatement();
stmt.executeUpdate(SqlCommand);
stmt.close();
System.out.println("Sql query executed successfull");
} catch (Exception e){
   System.out.println("Failed to execute query due to error: " +     e.getMessage());
}
}
// this method returns a ResultSet for a query which can be iterated throughd
public ResultSet ExecuteSqlQueryWithReturn(String SqlCommand){
try{
Statement stmt = null;

stmt = c.createStatement();
 ResultSet rs = stmt.executeQuery(SqlCommand);
 return rs;
}catch (Exception e){
System.out.println("An Error has ocured while executing this query" + e.getMessage());
}
return null;
}
}

这是程序中的主要代码

import java.sql.*;
public class InstaText {
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
 Dbm db = new Dbm("people.db");
 ResultSet rs = db.ExecuteSqlQueryWithReturn("select * from people;");
try{
   String name = "";
   int age = 0;
   String address = "";
 while (rs.isLast() == false){
 name = rs.getString("name");
 age = rs.getInt("age");
 address = rs.getString("address");
         System.out.println("Name is " + name +" age is " + age + " Address is " + address);
         rs.next();
 }
}catch (Exception e ){
System.out.println("Error: " + e.getMessage());
}
      db.CloseDB();
   }
 }

但是,当我执行它时,我会得到以下输出:

 Opened database successfully
 Error: function not yet implemented for SQLite
 Closed Database Successfull

那么,如何解决错误"错误:尚未为sqlite实现的功能"?我正在使用Mac OS Sierra上的最新JDBC运行Netbeans IDE。

编辑:这是添加e.printstacktrace()之后的输出;在捕获块中:

Opened database successfully
Error: function not yet implemented for SQLite
java.sql.SQLException: function not yet implemented for SQLite
Closed Database Successfull
at org.sqlite.jdbc3.JDBC3ResultSet.isLast(JDBC3ResultSet.java:155)
at instatext.InstaText.main(InstaText.java:24)

问题不是您的选择查询,而是您在ResultSet实例上使用的isLast()方法来检索结果。
尝试next()方法,它应该起作用:

while (rs.next()){
 name = rs.getString("name");
 age = rs.getInt("age");
 address = rs.getString("address");
         System.out.println("Name is " + name +" age is " + age + " Address is " + address);
         rs.next();
 }

您可以在这里阅读:https://github.com/bonitasoft/bonita-connector-database/issues/1使用sqllite,您可能会使用isLast()方法有一些限制:

根据JDBC文档 (http://docs.oracle.com/javase/7/docs/api/java/sql/sql/resultset.html) 如果结果集,则禁止呼叫iSlast()和第一个()方法 type是type_forward_only(例如sqlite)。

最新更新