1

我正在编写一种方法,允许用户将他们的数据存储在我的数据库中。

我遇到的问题是在我的数据库中存储一个数字数据类型,用于用户 ID。

首先,如何判断 ID 号是否自动递增?这些是它的属性:

Type: Numeric
Column size: 4
Decimal digits: 0
Part of primary key: true
Part of an index: true
Position: 1

我确定我在某处读过,将其设置为索引的一部分(true)允许自动递增。任何人都可以确认吗?

更重要的是,在我的表中插入数据时,我收到一条错误消息:

Columns of type 'NUMERIC' cannot hold values of type 'CHAR'. 

这是我插入代码的片段(如果需要,我可以透露更多):

Statement pStatement = conn.createStatement();
String selectSQL = ("INSERT INTO APP.PERSON VALUES ('" + '3' + "','" + user + "','" + pass + "','" + fName + "','" + sName + "','" + sQuestion + "','" + sAnswer + "') ");
pStatement.executeUpdate(selectSQL);

如您所见,我将 ID(第一个值)手动设置为 3。我相信这会引发错误,并且想知道如何使用 INSERT 命令插入数值。

我在 Mac OS X Mountain Lion 上使用 Netbeans 7.3 Beta 2 编写 Java 代码。我正在使用 Derby 数据库。

4

3 回答 3

4

嘿兄弟,我建议你使用 prepareStatement

String template = "INSERT INTO APP.PERSON VALUES (YOUR,TABLE,COLLUMN,NAME) values (?,?,?,?)";
           PreparedStatement stmt = yourConnection.prepareStatement(template);

因此,如果您想将 ID 设置为整数,请让 java 使用

       stmt.setInt(1, ID);
       stmt.setString(2, user);
       stmt.setString(3, fName);
       stmt.executeUpdate();

我不知道您的表结构如何,但这是一个示例,如果您想使用 int usestmt.setInt(1, 3);

1--> 你在字符串模板中设置的位置

3-->也许你想硬编码ID

这是我使用prepareStatement的示例模式

String name = "shadrach"
Double price = "100.00"
int qty = 3;
    String template = "INSERT INTO PRODUCT (NAME,PRICE,QTY) values (?,?,?)";
                PreparedStatement stmt = connection.prepareStatement(template);
                stmt.setString(1, name);
                stmt.setDouble(2, price);
                stmt.setInt(3, qty);
                stmt.executeUpdate();
于 2013-02-07T02:24:58.850 回答
1

您不应该在数字周围加上单引号。我不确定其他列数据类型的类型,但任何数字都不应包含单引号。

Statement pStatement = conn.createStatement();

String selectSQL = ("INSERT INTO APP.PERSON VALUES (3,'" + user + "','" + pass + "','" + fName + "','" + sName + "','" + sQuestion + "','" + sAnswer + "') ");

 pStatement.executeUpdate(selectSQL);

您还应该考虑将其切换为使用PreparedStatement,连接字符串来执行 SQL 将使您容易受到 SQL 注入攻击。准备好的报表将有助于降低这种风险。

于 2013-02-07T01:55:49.577 回答
1

当表格需要一个数字时,您正在插入字符3。

您可以使用ResultSetMetaData的 isAutoIncrement 方法判断列是否为自动增量。希望有帮助....

于 2013-02-07T01:58:07.827 回答