我试图通过java将数据插入到SQL server中的表中。第一个是ID,第二个是nvarchar名称,第三个是xml类型(我把它作为字符串插入)。
我有一个db管理器类,它管理查询执行本身(包括到DB的连接)。
插入代码:
stmt = String.format("INSERT INTO [dbo].[WorkflowFull] ([ID], [Name], [Workflow]) VALUES (%d, N'%s', N'%s')", workflowID, fileNameForDB, fileContent);
try{
dbManager.insert(stmt);
} catch (SQLException e){
System.out.println("Problem adding workflow " + fileName + " to DB");
e.printStackTrace();
continue;
}我所犯的错误:
java.sql.SQLException: Wrong number of parameters: expected 3, was given 0 Query: INSERT INTO [dbo].[WorkflowFull] ([ID], [Name], [Workflow]) VALUES (1, N'testWorkflow', N'<Workflow name="NetMonitorTester" start="atomic">
<atomic name="atomic" startingPoint="monitor" hostType="PC" multiplicity="1">
<activity package="MonitorNetwork" name="monitor" input="null" stopCondition="never">
<filter query="regex:GET.+(.{10,})\1{10,}"/>
<resultQuery retrieve="SELECT * FROM PUBLIC.TCP_PACKETS"/>
</activity>
</atomic>
</Workflow>') Parameters: []
at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)
at org.apache.commons.dbutils.QueryRunner.insert(QueryRunner.java:610)
at org.apache.commons.dbutils.QueryRunner.insert(QueryRunner.java:516)
at org.bgu.ddms.utils.dbutils.DbManager.insert(DbManager.java:165)
at org.bgu.ddms.cnc.CNC.populateWorkflows(CNC.java:289)
at org.bgu.ddms.cnc.CNC.populateDB(CNC.java:244)
at org.bgu.ddms.cnc.Main.main(Main.java:108)当我在SSMS中运行完全相同的查询时,一切都正常。
发布于 2017-03-16 08:32:06
第一个是ID,第二个是nvarchar名称,第三个是xml类型(我把它作为字符串插入)。
您的方式可能会像现在这样导致语法错误,不好的是SQL注入,因此为了避免这种情况,您必须使用PreparedStatement,例如:
String query = "INSERT INTO [dbo].[WorkflowFull] ([ID], [Name], [Workflow]) VALUES (?, ?, ?)");
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, workflowID);
preparedStatement.setString(2, fileNameForDB);
preparedStatement.setString(3, fileContent);https://stackoverflow.com/questions/42828630
复制相似问题