昨天做的一个东西,只能取到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);        }}

解决方案 »

  1.   

     String sql = "select * from log where accountnumber=  '" + accountNumber + "' 
    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.   

    上面说的没有错 楼主你的sql写错了
      

  3.   

    1:字符串拼凑Sql语句是最变态的,出了问题不好找,而且效率低。prepareStatement就是增强预处理功能
    2:select accountNumber,balance,date,id,sum, isDelete , transactionType from log where accountnumber = ? and currencyType = ?