我有以下代码作为从 CSV 文件读取并通过生成插入语句并执行它们将其内容存储到数据库中的方法的一部分。
....
try
{
while( (strLine = br.readLine()) != null)
{
query = baseQuery;
st = new StringTokenizer(strLine, ",");
while(st.hasMoreTokens())
{
token = st.nextToken();
if("TIMESTAMP".equals(values.get(tokenNumber)))
query += "'" + GeneralMethods.dateFormat(token) + "' , ";
else
query += "'" + token + "' , ";
}
query = query.substring(0, query.length()-2) + ")";
ds.insertData(query );
}
} catch (IOException e)
{
logger.error("IOException Occured while trying to read lines of CSV file: \n " + e.getMessage());
status = false;
}
一切正常,除了查询是用空值生成的。这被打印到日志中:
Failed to execute query: INSERT INTO c1_ds1 ( TIME , USER ) VALUES ('' , '' )
我认为问题出在这两行:
if("TIMESTAMP".equals(values.get(tokenNumber)))
query += "'" + GeneralMethods.dateFormat(token) + "' , ";
else
query += "'" + token + "' , ";
我已在日志中打印了 (token) 变量,并且它按照应有的方式从 CSV 文件中获取值。 有谁知道问题出在哪里吗?
我也尝试过:
query += "'"; query += token;
最佳答案
查看PreparedStatement而不是通过字符串连接您的查询。这将使数据库驱动程序为您处理转义和转换值。
关于java - java中通过字符串连接生成查询——变量值不被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638653/