0

Java と SQL は初めてのプログラミング言語です。私はJDBCでいくつかの作業をしようとしています。ユーザーが ID を入力し、変数に基づいてクエリを返すことができるようにしたいと考えています。誰かが少なくとも私を正しい方向に向けることができれば...これが私が始めているコードです。大雑把ですが、メインクラスでより適切に実装できるように、機能するコードを取得しようとしているだけです。

 Scanner input = new Scanner(System.in);
    Class.forName("org.sqlite.JDBC");
    Connection conn =
            DriverManager.getConnection("jdbc:sqlite:C:\\Users\\Derek\\Documents\\Databases\\example.sqlite");
    Statement stat = conn.createStatement();
    PreparedStatement prep1 = conn.prepareStatement(
            "insert into MedType values (?, ?);");
    PreparedStatement prep2 = conn.prepareStatement(
            "insert into Media values (?, ?,?, ?,?, ?);");

    System.out.print("Please choose a database(MedType or Media): ");
    String db=input.next();

    if(db.equalsIgnoreCase("MedType"))
    {
    System.out.print("Enter in ID: ");
    String answer1 = input.next();

    System.out.print("");
    String answer2 = input.nextLine();

    System.out.print("Enter in Description: ");
    String answer3 = input.nextLine();

    prep1.setString(1, answer1);//add values into cell
    prep1.setString(2, answer3);
    prep1.addBatch();//add the columns that have been entered

    }
conn.setAutoCommit(false);
    prep1.executeBatch();
    prep2.executeBatch();
    conn.setAutoCommit(true);




    System.out.print("Please Enter Query(One or All): ");
    String q=input.next();


    ResultSet rs= stat.executeQuery("select * from MedType;");


    if(q.equalsIgnoreCase("all")){
    while (rs.next()) {
        System.out.print("All ID = " + rs.getString("ID") + " ");
        System.out.println("All Description = " + rs.getString("Description"));}
    }
   if(q.equalsIgnoreCase("one")){
         System.out.print("Enter ID: ");

    }
   int idNum=input.nextInt();
    ResultSet oneRs = stat.executeQuery("select * from MedType Where"+ (rs.getString("ID")+"="+idNum));

   if(q.equalsIgnoreCase("one")){


        while (oneRs.next()) {
            System.out.print("ID = " + oneRs.getString("ID") + " ");
            System.out.println("Description = " + oneRs.getString("Description"));
        }
    }

    rs.close();
    oneRs.close();
    conn.close();

}
}

ResultSet oneRs = stat.executeQuery("select * from MedType Where"+
   (rs.getString("ID")+"="+idNum));

これは私が問題を抱えているところです。ID がユーザー入力と等しい場合、テーブルから何かを返すというステートメントを作成します。このエラーが発生します

Exception in thread "main" java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near "=": syntax error)

4

2 に答える 2

1

あなたのクエリで:

select * from MedType Where"+ (rs.getString("ID")+"="+idNum

すべてのタプルを返す最初の結果セットから ID を取得しようとしているようです。

where句ではIDが存在しないため、これは機能しません(現在、なしでは結果がないためrs.next())。結果があった場合は、' where 3 = 3' のようなものになる可能性があります (3 は、以前に返された値の結果になります。単純に使用しようとしましたか:

select * from MedType Where ID = " + idNum

それが理にかなっていることを願っています。

于 2013-05-03T09:19:20.510 に答える