1

私が書き込もうとしているこの練習用CRUDアプリケーションがあります。生年月日などの連絡先を保存するアプリです。Dateコマンドラインを使用して入力を受け入れ、これをHSQLDBデータベースに格納しているため、型引数を受け入れる方法がわかりません。スティングから長く解析してみましたが、スローし続けSQLDataExceptionます。

ここで、この変数に使用するコード行

//this in the class with main

    private Date dob;

    public Date getDob() {
    return dob;
        }



    public void setDob(Date dob) {
            this.dob = dob;
        }

    System.out.println("Enter date of birth of "+n+" in the format dd/mm/yyyy
    String date = sc2.nextLine();
    long d = Date.parse(date);
    uv.setDob(d);

//class with all the business logic

public void addContact(String cb, String name, long dob, String email, String phno, String tag) {
sql = "insert into "+ cb + "(name,dob,email,phone,tag) values (?,?,?,?,?)";
 try {
    con = JDBCHelper.getConnection();
    ps1 = con.prepareStatement(sql);
    ps1.setString(1, name);
    ps1.setLong(2, dob);
    ps1.setString(3, email);
    ps1.setString(4,phno);
    ps1.setString(5, tag);
 }   
 catch(SQLException e) {
    e.printStackTrace();
 }

}

日付を入力すると例外が発生します

java.sql.SQLSyntaxErrorException: incompatible data type in conversion
        at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.Util.throwError(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.setParameter(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.setLongParameter(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.setLong(Unknown Source)
Caused by: org.hsqldb.HsqlException: incompatible data type in conversion
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.types.DateTimeType.convertJavaToSQL(Unknown Source)
4

4 に答える 4

1

SQL日付を作成する必要があります。コンストラクターには時間がかかるので、問題ないはずです。

ps1.setDate(2, new java.sql.Date(dob));
于 2013-01-12T08:09:19.437 に答える
0

文字列を現在まで解析するには、SimpleDateFormatクラスを使用できます。例:

SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);
Date date = simpleDateFormat.parse(date);

次に、 PreparedStatementsetDate(int, Date)のメソッドを使用できます。

于 2013-01-12T08:13:05.890 に答える
0

最初のステップとしてSimpleDateFormatを使用して日付を解析し、入力が目的の形式であることを確認します。その後、プリペアドステートメントで同じ値を使用できます。

また、これを試してください

于 2013-01-12T08:21:18.113 に答える
0

任意の日付形式の場合は、を使用SimpleDateFormatして取得java.util.Dateし、それをJDBC日付に変換しますjava.sql.Date sqlDate = new java.sql.Date(date.getTime()))。SQL互換形式(yyyy-MM-dd)の場合、java.sql.Date.valueOf(String)ヘルパーがあります。

于 2013-01-12T10:07:44.267 に答える