昨天做的一个东西,只能取到log表中的balance字段,其他的取不到,
注释的部分会报错,找不到数据。调试的时候balance的数据可以取到的。表字段:
id int,
accountNumber varchar(20),
balance money,
currencyType varchar(20),
date datetime,
transactionType varchar(20),
sum money,
isDelete int,取消注释的部分后,错误的提示是data not found,注释成现在这样,只可以获得balance的值。代码如下:import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import util.ConnectDB;
import dom.DOMLog;public class DAOLog { /**
* 查询和写入交易日志
*/ public static Connection conn = null;
public static PreparedStatement pstmt = null;
public static ResultSet rs = null;
public static Vector<DOMLog> readLog(DOMLog domLog) {
// 读取交易记录
Vector<DOMLog> domLogV = new Vector<DOMLog>(); try {
conn = ConnectDB.getConnection();
String accountNumber = domLog.getAccountNumber();
String currencyType = domLog.getCurrencyType();
// String sql = "select * from log where accountNumber =
// '2222222222'";
String sql = "select * from log where accountnumber= '"
+ accountNumber + "' and " + "currencyType='"
+ currencyType + "'";
System.out.println(sql);
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery(); while (rs.next()) {
DOMLog dom=new DOMLog();
// dom.setAccountNumber(rs.getString("accountNumber"));
dom.setBalance(rs.getDouble("balance"));
// System.out.println(rs.getDouble("balance"));
//为什么只能查询到balance的结果?其他的无法获得?
// dom.setCurrencyType(rs.getString("currencyType"));
// dom.setDate(rs.getString("date"));
// dom.setId(rs.getInt("id"));
// dom.setIsDelete(rs.getInt("isDelete"));
// dom.setSum(rs.getDouble("sum"));
// dom.setTransactionType(rs.getString("transactionType"));
domLogV.add(dom);
}
} catch (SQLException e) {
e.printStackTrace(); } finally {
ConnectDB.close(rs, pstmt, conn);
}
return domLogV; } public static void main(String[] args) {
// TEST CODE
DOMLog domLog = new DOMLog();
domLog.setAccountNumber("2222222222");
domLog.setCurrencyType("JPY");
// domLog.setSum(12222);
// domLog.setTransactionType(Constant.DO_CASH.trim());
// domLog.setBalance(22322);
DAOLog.readLog(domLog); }}
注释的部分会报错,找不到数据。调试的时候balance的数据可以取到的。表字段:
id int,
accountNumber varchar(20),
balance money,
currencyType varchar(20),
date datetime,
transactionType varchar(20),
sum money,
isDelete int,取消注释的部分后,错误的提示是data not found,注释成现在这样,只可以获得balance的值。代码如下:import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import util.ConnectDB;
import dom.DOMLog;public class DAOLog { /**
* 查询和写入交易日志
*/ public static Connection conn = null;
public static PreparedStatement pstmt = null;
public static ResultSet rs = null;
public static Vector<DOMLog> readLog(DOMLog domLog) {
// 读取交易记录
Vector<DOMLog> domLogV = new Vector<DOMLog>(); try {
conn = ConnectDB.getConnection();
String accountNumber = domLog.getAccountNumber();
String currencyType = domLog.getCurrencyType();
// String sql = "select * from log where accountNumber =
// '2222222222'";
String sql = "select * from log where accountnumber= '"
+ accountNumber + "' and " + "currencyType='"
+ currencyType + "'";
System.out.println(sql);
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery(); while (rs.next()) {
DOMLog dom=new DOMLog();
// dom.setAccountNumber(rs.getString("accountNumber"));
dom.setBalance(rs.getDouble("balance"));
// System.out.println(rs.getDouble("balance"));
//为什么只能查询到balance的结果?其他的无法获得?
// dom.setCurrencyType(rs.getString("currencyType"));
// dom.setDate(rs.getString("date"));
// dom.setId(rs.getInt("id"));
// dom.setIsDelete(rs.getInt("isDelete"));
// dom.setSum(rs.getDouble("sum"));
// dom.setTransactionType(rs.getString("transactionType"));
domLogV.add(dom);
}
} catch (SQLException e) {
e.printStackTrace(); } finally {
ConnectDB.close(rs, pstmt, conn);
}
return domLogV; } public static void main(String[] args) {
// TEST CODE
DOMLog domLog = new DOMLog();
domLog.setAccountNumber("2222222222");
domLog.setCurrencyType("JPY");
// domLog.setSum(12222);
// domLog.setTransactionType(Constant.DO_CASH.trim());
// domLog.setBalance(22322);
DAOLog.readLog(domLog); }}
and " + "currencyType='" + currencyType + "'"; SQL写错了,
String sql = "select * from log where accountnumber= '" + accountNumber + "'
and currencyType= '" + currencyType + "' "; 还有就是你这个地方是写交易日志,那sql应该采用数据注入的方式来做啊,更何况你这个地方用的就是PreparedStatement,为什么还要这样写sql呢?建议楼主试试这样写String sql = "select * from log where accountnumber = ? and currencyType = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,accountNumber);
pstmt.setString(2,currencyType);
rs = pstmt.executeQuery();
这样写有两个好处,第一是安全,就算accountNumber和currencyType变量是很“变态”的输入也不会有问题;第二个就是可以防止你写错sql语句,这种写法不需要你写很多的单引号、双引号的东西。简洁明了。
2:select accountNumber,balance,date,id,sum, isDelete , transactionType from log where accountnumber = ? and currencyType = ?