我按照面向对象方法做了两个代码。其中一个是DatabaseConnection代码,您可以在其中找到服务器的查询,连接和断开连接。 我的DatabaseConnection类运行正常,但我的App类有问题,因为通过执行面向对象方法,所以我无法在App类中使用此代码:
PreparedStatment ps=connection.prepareStatement(query);
ps.setString(1,x);
ps.setInt(2,x);
...等 因为PrepareStatement在DatabaseConnection类中。 所以我用String.format替换它,我可以告诉你:
String varidProduct=new String();
String varNameProduct=new String();
String varBrandProduct=new String();
int varPriceProduct;
String varDate=new String();
int varquantStorage;
System.out.print("Please write ID: ");
varidProduct = input.readLine().trim();
System.out.print("Please write product name: ");
varNameProduct=input.readLine().trim();
System.out.print("Please write the brand: ");
varBrandProduct=input.readLine().trim();
System.out.print("Ingrese el price: ");
varPriceProduct=Integer.parseInt(input.readLine().trim());
System.out.print("Please insert the date (day/month/year): ");
varDate=input.readLine().trim();
System.out.print("Ingrese la cantidad en Bodega: ");
varquantStorage=Integer.parseInt(input.readLine().trim());
String sqlCommandText = String.format("insert into Product values (%s,%s,%s,%d,%s,%d)",varidProduc,varNameProduct,varBrandProduct,varPriceProduct,varDate,varquantStorage);
if(connection.executeSQLcommand(sqlCommandText)>0)
//I am calling here a method in DatabaseConnection.class
System.out.println("The information has been inserted.");
else
System.out.println("The information has not been inserted.");
}catch(Exception e){ System.out.println(e.getMessage());}
}
如果我只插入数字作为varidProduc,varNameProduct,varBrandProduc,varPriceProduct和varDate,系统会响应更新,但是如果我写字符串(因为在我的数据库SQL Server 2008中,这些列都是varchar,除了日期)系统响应我的“无效列名称”除外。我真的不知道我在这里做错了什么。 对不起,如果我的拼写错过了什么,我来自智利,我正在努力!哈哈
我刚刚阅读了一些关于无效列名的其他答案,但其中没有一个与我的问题有关。
感谢您的时间!如果您需要更多详细信息,请告诉我们!
答案 0 :(得分:0)
如果您坚持使用/必须使用String.format
构建SQL,请在SQL语句中引用字符串值:
String.format("insert into Product values ('%s','%s','%s',%d,'%s',%d)",
varidProduc,varNameProduct,varBrandProduct,
varPriceProduct,varDate,varquantStorage);
否则值将被解释为标识符,在本例中为列名。
答案 1 :(得分:0)
第一步是将insert语句写成更具可读性:
INSERT INTO Product (Column names here) VALUES (Column values here)
真正的问题是你的字符串值%s应该像这样转义:
'%s'
答案 2 :(得分:0)
我认为问题在于日期字符串'/'中的正斜杠,我认为你必须逃避sql的正斜杠,你必须使用'\'作为转义字符。
So finally your code should be something like this :
After reading the date....
vardate.replace('/','\\/');
String sqlCommandText = String.format("insert into Product values ('%s','%s','%s',%d,'%s',%d)",varidProduc,varNameProduct,varBrandProduct,varPriceProduct,varDate,varquantStorage)
Try using this. Let me know if this works..