我一直在尝试使用此代码在数据库中创建一个表,该表成功创建之前的代码。
sudo rm -rf /var/lib/ruby/1.9.1/
我的代码连接到数据库服务器:
//Creates "Parts" Table if it's not already created.
public void createTableIfNecessary() throws SQLException{
String createString =
"USE inventory; " +
"CREATE TABLE IF NOT EXISTS parts " +
"(part_name TEXT NOT NULL, remaining_amt INT NOT NULL, " +
"restock_amt INT, barcode TEXT, location TEXT, part_id INT NOT NULL AUTO_INCREMENT);";
Statement createTable = this.con.createStatement();
createTable.execute(createString);
System.out.println("Table created or already existed: Parts");
}
(这有效,但看起来可能会有所帮助)
我的错误:
try{Class.forName("com.mysql.jdbc.Driver");} catch(Exception e){
e.printStackTrace();
}
this.con = null;
Properties connectionProps = new Properties();
connectionProps.put("user", this.userName);
connectionProps.put("password", this.password);
this.con = DriverManager.getConnection("jdbc:mysql://" + this.serverName + ":" + this.portNumber + "/", connectionProps);
System.out.println("Connected to MySQL Database Server");
我认为这只是我对MySQL的无能,但也许有人在这里可以看到我的语法错误。谢谢!
答案 0 :(得分:3)
USE inventory;
语句不适用于JDBC连接的上下文。您需要使用Connection#setCatalog()切换到特定的数据库。有关详细信息,请参阅
Java, how to change current database to another?
这样做并从SQL中删除USE子句。
答案 1 :(得分:1)
对于mysql中的auto_increment列,必须将其编入索引。因此,您必须通过将其作为主键或唯一来索引part_id
。
CREATE TABLE IF NOT EXISTS parts
(part_name TEXT NOT NULL,
remaining_amt INT NOT NULL,
restock_amt INT,
barcode TEXT,
location TEXT,
part_id INT NOT NULL AUTO_INCREMENT,
primary key (part_id));