Java Oracle数据库连接错误
我不熟悉Java和Oracle。我正在尝试制作一个列出产品序列号的应用程序,当您单击列表中的产品序列号时,它会在文本框中显示数据库中的其他列信息。我有一个名为CRUD的表单。我正在使用Oracle 10g。代码如下:Java Oracle数据库连接错误,java,oracle,oracle10g,Java,Oracle,Oracle10g,我不熟悉Java和Oracle。我正在尝试制作一个列出产品序列号的应用程序,当您单击列表中的产品序列号时,它会在文本框中显示数据库中的其他列信息。我有一个名为CRUD的表单。我正在使用Oracle 10g。代码如下: package project1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import
package project1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class CRUD extends javax.swing.JFrame {
Connection connection = null;
public CRUD() {
try {
initComponents();
String driverName = "oracle.jdbc.driver.OracleDriver";
Class.forName(driverName);
String serverName = "192.168.0.36";
String portNumber = "1521";
String sid = "XE";
String url = "jdbc:oracle:thin:@"+serverName+":"+portNumber+":"+sid;
String userName = "HR";
String password = "hr";
try {
connection = DriverManager.getConnection(url,userName,password);
} catch (SQLException ex) {
Logger.getLogger(CRUD.class.getName()).log(Level.SEVERE, null, ex);
}
try {
String temp="";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT SERI_NO FROM KART");
while(rs.next()) // dönebildiği süre boyunca
{
String s = rs.getString("SERI_NO") ; //kolon isimleri oluşturuldu
temp+=s+"_";
}
Object [] tem_obj;
tem_obj=temp.split("_");
listOgrenciler.setListData(tem_obj);
} catch (SQLException ex) {
Logger.getLogger(edit.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(CRUD.class.getName()).log(Level.SEVERE, null, ex);
}
listOgrenciler.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
if (!arg0.getValueIsAdjusting()) {
try {
Statement stmtx = connection.createStatement();
Object[] sss=listOgrenciler.getSelectedValues();
String swhere="" ;
for (int i = 0; i < sss.length; i++) {
swhere+=sss[i].toString()+",";
}
swhere=swhere.substring(0,swhere.length()-1);
ResultSet rsx = stmtx.executeQuery("SELECT * FROM KART where SERI_NO in ("+swhere+")") ;
String temp="";
Object [] tem_obj;
tem_obj=temp.split("_");
String ara="";
for (int i = 0; i < tem_obj.length; i++) {
ara+=tem_obj[i].toString()+"\n";
}
texttoarea.setText(ara);
} catch (SQLException ex)
{
Logger.getLogger(edit.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
}
正如我之前所说,我对Java和Oracle都是新手。如果错误如此明显,请不要笑:)实际上,您连接到Oracle DB的步骤没有问题,连接成功,您的问题在查询中。确保您的
KART
表中有一个SERI_NO
列
我建议您在代码中从任何SQL
客户机(如SQLDeveloper
)运行两个相同的查询,并查看这些查询检索到的内容。您的查询
ResultSet rsx = stmtx.executeQuery("SELECT * FROM KART where SERI_NO in ("+swhere+")") ;
应该是这样的:
ResultSet rsx = stmtx.executeQuery("SELECT * FROM KART where SERI_NO in ('"+swhere+"')") ;
注意这句话一次,
swhere=swhere.substring(0,swhere.length()-1);
将上述声明替换为以下内容
shere=swhere.substring(0,swhere.length()-2);
因为sql语句中包含了一个额外的逗号(,)。您的连接没有问题 请在代码中添加一些日志记录,这样您就可以准确地知道错误抛出的位置 我想是这条线出了差错。。 从卡丁车中选择*序列号(“+swhere+”) 您必须将其指定为带“”的字符串,实际选择的字符串应如下所示。 从卡丁车中选择*,其中序列号位于('ABC','XCV')
因此,请用这个检查“swhere”的值。您应该打印出生成的语句,然后向我们显示。请包括表格定义。但是我猜您在子句中用双引号括起了字符文本。在SQL中,双引号(
“
)用于引用标识符。字符文本需要用单引号括起来,因此值应该是'SNS080961097'
而不是“SNS080961097”“
debug以查看变量swhere
所携带的内容…错误消息与SERI\u NO
列无关。感谢您的回答。但我对查询没有问题,它在sqlDeveloper上运行良好。在ListLogrenciler.addListSelectionListener(new ListSelectionListener())之前,代码运行良好 line@user3331869你需要检查这两个问题,因为问题是由其中一个问题引起的,我想这是第二个问题。我打了分,但我不能投赞成票,因为我还没有那么受欢迎
shere=swhere.substring(0,swhere.length()-2);