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";