嘿我正在制作一个小的webapp并且在其中有一个java文件,其中包含连接数据库和获取数据的函数。 但我得到一个例外,任何人都知道为什么,因为如果我是对的,我的查询是有效的。
我使用eclipse和mysql工作台。
功能:
import java.sql.*;
public class Functions {
public void dbConn(String nVal, String inpVal){
System.out.println("Running function...");
if(nVal != null || inpVal != null){
String sqlSerch;
if(nVal.equals("name")){
sqlSerch = "ID, aNaam FROM profiles WHERE naam = 'casper'";
}else{
sqlSerch = "naam, aNaam FROM profiles WHERE ID = " + inpVal;
}
//driver / db path
final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
final String DB_URL = "jdbc:mysql://localhost:3306/profile";
//DB user&password
final String USER = "root";
final String PASS = "";
//declare con & sql var
Connection conn = null;
Statement stmt = null;
//register jdbc driver
try{
Class.forName(JDBC_DRIVER);
//make a connection
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//SQL Statement
stmt = conn.createStatement();
String sql = "SELECT "+ sqlSerch;
ResultSet rs = stmt.executeQuery(sql);
//Declareer variablen met data uit db
//int id = rs.getInt("ID");
String naam = rs.getString("naam");
String aNaam = rs.getString("aNaam");
System.out.println( naam + aNaam);
rs.close();
stmt.close();
conn.close();
}catch(Exception e){
System.out.println(e);
}
System.out.println(" - " + nVal + " - " + inpVal);
}
}
}
异常:
java.sql.SQLException:未找到列'naam'。
数据库结构:
提前谢谢你,
卡斯帕
答案 0 :(得分:2)
当您通过 nVal 参数收到“姓名”时,只会选择 ID 和 aNaam 列。
因此,如果您尝试从 ResultSet 获取 naam 的值,则会获得异常。
此外,我建议将查询结果限制为1,因为您使用WHERE子句与 naam 和 ID ,这似乎不是唯一的,除非有屏幕截图中没有包含一些约束。
希望这会有所帮助。
答案 1 :(得分:1)
您分支并创建查询:
if(nVal.equals("name")){
sqlSerch = "ID, aNaam FROM profiles WHERE naam = 'casper'";
}else{
sqlSerch = "naam, aNaam FROM profiles WHERE ID = " + inpVal;
}
然后,无论分支如何,您都会获得结果集值:
String naam = rs.getString("naam");
String aNaam = rs.getString("aNaam");
但是“naam”不会出现在你的“ID,aNaam”搜索中。
一般来说,一个好的经验法则是始终返回相同的列。