Java 无效的光标状态-插入行时没有当前行
我曾尝试研究过这个问题,大多数情况下,答案都与查询数据库中的数据有关。我正在尝试将数据插入数据库,但不断出现以下错误: 无效的光标状态-没有当前行 这是我的密码: 它创建数据库时没有任何问题,但是当我尝试插入一行时,会出现错误Java 无效的光标状态-插入行时没有当前行,java,mysql,database,Java,Mysql,Database,我曾尝试研究过这个问题,大多数情况下,答案都与查询数据库中的数据有关。我正在尝试将数据插入数据库,但不断出现以下错误: 无效的光标状态-没有当前行 这是我的密码: 它创建数据库时没有任何问题,但是当我尝试插入一行时,会出现错误 package importtimesheet; import java.io.IOException; import java.sql.*; import java.text.ParseException; import java.text.SimpleDateFor
package importtimesheet;
import java.io.IOException;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class ImportTimeSheet
{
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:derby://localhost:1527/PaperRoute";
// Database credentials
static final String USER = "<username removed>";
static final String PASS = "<password removed>";
private static String buildit(String names, String types)
{
String[] na = names.split("\t");
String[] ta = types.split("\t");
String result = "CREATE TABLE HOURS_WORKED (";
for (int i = 0; i < na.length; i++)
{
result = result + na[i] + " " + ta[i] + " not NULL,";
}
result = result + " PRIMARY KEY (DATE))";
return result;
}
public static void main(String[] args) throws IOException
{
boolean bon = false;
String[] temp;
String file_name = "C:\\Users\\Michael_2\\Dropbox\\Programming\\Finished Programs\\ExportTimeSheet\\data.txt";
String[] aryLines = new String[0];
//IMPORT DATA FROM FLAT FILE
try
{
ReadFile file = new ReadFile(file_name);
aryLines = file.OpenFile();
// for (int i = 0; i < aryLines.length; i++)
// {
// System.out.println(aryLines[i]);
// }
} catch (IOException e)
{
System.out.println(e.getMessage());
}
String names = aryLines[0];
String types = aryLines[1];
//CREATE DB TABLE
Connection conn = null;
Statement stmt = null;
ResultSet rs;
try
{
//Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//Open a connection
System.out.println("Connecting to selected database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("Connected to database successfully...");
//Execute a query
System.out.println("Creating table in database...");
stmt = conn.createStatement();
String sql = buildit(names, types);
stmt.executeUpdate(sql);
System.out.println("Created table in database...");
} catch (SQLException se)
{
//Handle errors for JDBC
se.printStackTrace();
} catch (Exception e)
{
//Handle errors for Class.forName
e.printStackTrace();
} finally
{
//finally block used to close resources
try
{
if (stmt != null)
{
conn.close();
}
} catch (SQLException se)
{
}// do nothing
try
{
if (conn != null)
{
conn.close();
}
} catch (SQLException se)
{
se.printStackTrace();
}//end finally try
}//end try
for (int i = 2; i < aryLines.length; i++)
{
System.out.println(aryLines[i]);
temp = aryLines[i].split("\t");
if (temp[1] == "BON")
{
bon = true;
}
try
{
String host = "jdbc:derby://localhost:1527/PaperRoute";
String uName = "<username removed>";
String uPass = "<password removed>";
Connection con;
Statement stmnt;
con = DriverManager.getConnection(host, uName,uPass);
stmnt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String data = "SELECT * from HOURS_WORKED";
rs = stmnt.executeQuery(data);
Time arrived = java.sql.Time.valueOf(temp[2]);
Time received = java.sql.Time.valueOf(temp[3]);
Time left = java.sql.Time.valueOf(temp[4]);
Time started = java.sql.Time.valueOf(temp[5]);
Time finished = java.sql.Time.valueOf(temp[6]);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date parsed = sdf.parse(temp[0]);
java.sql.Date sql = new java.sql.Date(parsed.getTime());
String[] na = names.split("\t");
rs.moveToInsertRow();
rs.updateDate(1, sql);
rs.updateBoolean(2, bon);
rs.updateTime(3, arrived);
rs.updateTime(4, received);
rs.updateTime(5, left);
rs.updateTime(6, started);
rs.updateTime(7, finished);
rs.updateRow();
System.out.println(sql);``
} catch (ParseException pe)
{
System.out.println(pe.getMessage());
} catch (SQLException se)
{
System.out.println(se.getMessage());
}
}
}
}
包导入页面;
导入java.io.IOException;
导入java.sql.*;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
公共类导入页面
{
//JDBC驱动程序名称和数据库URL
静态最终字符串JDBC_DRIVER=“com.mysql.JDBC.DRIVER”;
静态最终字符串DB_URL=“jdbc:derby://localhost:1527/PaperRoute";
//数据库凭据
静态最终字符串USER=“”;
静态最终字符串传递=”;
私有静态字符串buildit(字符串名称、字符串类型)
{
字符串[]na=names.split(“\t”);
字符串[]ta=types.split(“\t”);
String result=“创建工作小时数表(”;
for(int i=0;i
我相信您在查询中忘记了什么
String data = "SELECT * from HOURS_WORKED";
应该是
String data = "SELECT * from HOURS_WORKED FOR UPDATE";
我根本不知道这是怎么回事;您正在注册mysql驱动程序,但使用的是derby url
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:derby://localhost:1527/PaperRoute";
也许您想要(对于derby数据库):
或者(对于mysql数据库):
取决于您使用的数据库
也有很多地方可以“硬编码”值,而不是使用
static final String JDBC_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
static final String DB_URL = "jdbc:derby://localhost:1527/PaperRoute";
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:1527/PaperRoute";