当前位置: 技术问答>java相关
令人头痛的问题:java中SqlServer数据库查询程序,运行的结果与实际不符
来源: 互联网 发布时间:2015-02-17
本文导语: 下面是一段源程序,要实现通过按DigData按钮从sqlserver数据库里提取数据,再把数据写进一个文本文件中存在与源程序相同的目录下,编译运行都正常,但是结果(文本文件)与实际不符。 要查的表Tablepl中有2个字段...
下面是一段源程序,要实现通过按DigData按钮从sqlserver数据库里提取数据,再把数据写进一个文本文件中存在与源程序相同的目录下,编译运行都正常,但是结果(文本文件)与实际不符。
要查的表Tablepl中有2个字段(Id和Name)
其中只有3条记录:01 a
02 b
03 c
而且sql语句很简单,就是
select * from Tablepl where name='a'
但是返回的结果却只有01(应该还有a才对),
如果换成
select * from Tablepl
则编译正常,运行(点击DigData按钮)时出错:
SQL Error:java.sql.Exception:[Microsoft][ODBC SQL Server driver]无效的描述符号 0 s1002
这两个问题百思不得其解,还请高手指教:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.io.*;
public class Prc_c_m extends JFrame implements ActionListener{
JButton buttonDigdata=new JButton("Dig Data");
JButton buttonUpload=new JButton("UpLoad File");
public Prc_c_m() {
super("Prc_c");
setSize(360,360);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel();
pane.setLayout(new GridLayout(1, 2, 5, 15));
buttonDigdata.addActionListener(this);
pane.add(buttonDigdata);
pane.add(buttonUpload);
setContentPane(pane);
}
void digData() {
String data = "jdbc:odbc:prc_c";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(
data, "sa", "");
Statement st = conn.createStatement();
ResultSet rec = st.executeQuery(
"SELECT * FROM TablePl WHERE Name='a' ORDER BY Id");
try {
FileOutputStream file = new FileOutputStream("prc.txt");
int i=0;
while (rec.next()){
file.write(rec.getString(++i));
}
file.close();
} catch (IOException e) {
System.out.println("Error -- " + e.toString());
}
st.close();
} catch (SQLException s) {
System.out.println("SQL Error: " + s.toString() + " "
+ s.getErrorCode() + " " + s.getSQLState());
} catch (Exception e) {
System.out.println("Error: " + e.toString()
+ e.getMessage());
}
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() ==buttonDigdata)
digData();
}
public static void main(String[] arguments) {
Prc_c_m frame = new Prc_c_m();
frame.pack();
frame.setVisible(true);
}
}
要查的表Tablepl中有2个字段(Id和Name)
其中只有3条记录:01 a
02 b
03 c
而且sql语句很简单,就是
select * from Tablepl where name='a'
但是返回的结果却只有01(应该还有a才对),
如果换成
select * from Tablepl
则编译正常,运行(点击DigData按钮)时出错:
SQL Error:java.sql.Exception:[Microsoft][ODBC SQL Server driver]无效的描述符号 0 s1002
这两个问题百思不得其解,还请高手指教:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.io.*;
public class Prc_c_m extends JFrame implements ActionListener{
JButton buttonDigdata=new JButton("Dig Data");
JButton buttonUpload=new JButton("UpLoad File");
public Prc_c_m() {
super("Prc_c");
setSize(360,360);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel();
pane.setLayout(new GridLayout(1, 2, 5, 15));
buttonDigdata.addActionListener(this);
pane.add(buttonDigdata);
pane.add(buttonUpload);
setContentPane(pane);
}
void digData() {
String data = "jdbc:odbc:prc_c";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(
data, "sa", "");
Statement st = conn.createStatement();
ResultSet rec = st.executeQuery(
"SELECT * FROM TablePl WHERE Name='a' ORDER BY Id");
try {
FileOutputStream file = new FileOutputStream("prc.txt");
int i=0;
while (rec.next()){
file.write(rec.getString(++i));
}
file.close();
} catch (IOException e) {
System.out.println("Error -- " + e.toString());
}
st.close();
} catch (SQLException s) {
System.out.println("SQL Error: " + s.toString() + " "
+ s.getErrorCode() + " " + s.getSQLState());
} catch (Exception e) {
System.out.println("Error: " + e.toString()
+ e.getMessage());
}
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() ==buttonDigdata)
digData();
}
public static void main(String[] arguments) {
Prc_c_m frame = new Prc_c_m();
frame.pack();
frame.setVisible(true);
}
}
|
hzm1029(老农)的说法很对,此处代码中定义数据集为滚动不敏感型,那么每一条记录的各个字段可以用rec.getString(1)这种方式取数据,但为了准确、便捷的取出数据,最好使用rec.getString(fieldName1)这种形式(因为一般字段名已知,并且表的结构一般情况下不会变动),代码中的取数据的方式是不规范的,简单如下:
try{
while (rec.next()){
file.write(rec.getString(fieldName1));
file.write(rec.getString(fieldName2));
......
}
}catch(Exception e){
e.....;
}
try{
while (rec.next()){
file.write(rec.getString(fieldName1));
file.write(rec.getString(fieldName2));
......
}
}catch(Exception e){
e.....;
}
|
...
while (rec.next()){
file.write(rec.getString(1));
file.write(rec.getString(2));
}
...
i没有用
while (rec.next()){
file.write(rec.getString(1));
file.write(rec.getString(2));
}
...
i没有用
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。