JDBC初学的问题
刚开始学习JDBC,能够成功的连接数据库。但是遇到了问题,请高手帮忙。如以下代码所示,我的数据库中有学生表,分别有学号,姓名,年龄,性别,所在系,五个属性。执行“sele...
刚开始学习JDBC,能够成功的连接数据库。但是遇到了问题,请高手帮忙。
如以下代码所示,我的数据库中有学生表,分别有学号,姓名,年龄,性别,所在系,五个属性。执行“select *”语句时可以写出如下的便利语句,但是我想写出一个模块,让用户自己输入查询语言。例如:"select 姓名,年龄 from 学生",这样的话运行就会出错,getxxxx(unknown sourse)。有没有什么方法能够根据select语句而改变while语句,或者同等效果。谢谢各位了
while(rs.next())
{
System.out.print(rs.getInt("学号") + " ");
System.out.print(rs.getString("姓名") + " ");
System.out.print(rs.getInt("年龄") + " ");
System.out.print(rs.getString("性别") + " ");
System.out.println(rs.getString("所在系"));
} 展开
如以下代码所示,我的数据库中有学生表,分别有学号,姓名,年龄,性别,所在系,五个属性。执行“select *”语句时可以写出如下的便利语句,但是我想写出一个模块,让用户自己输入查询语言。例如:"select 姓名,年龄 from 学生",这样的话运行就会出错,getxxxx(unknown sourse)。有没有什么方法能够根据select语句而改变while语句,或者同等效果。谢谢各位了
while(rs.next())
{
System.out.print(rs.getInt("学号") + " ");
System.out.print(rs.getString("姓名") + " ");
System.out.print(rs.getInt("年龄") + " ");
System.out.print(rs.getString("性别") + " ");
System.out.println(rs.getString("所在系"));
} 展开
7个回答
展开全部
我帮你解决,这是个小玩意儿,给你思路,第一步,获取结果集中的字段的数量,即就是结果集中包含的字段个数,第二步循环获取每个字段的数据类型,第三步,按照字段类型获取结果集的数据。如果需要代码的话,给我信息。给你代码:
package tests;
import java.sql.Array;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
public final class JdbcTest {
/*
* 这里只写出关键代码,默认构造方法需要传入参数ResultSet
*/
int [] types;//定一个数组,用于存放获得的字段类型。
public JdbcTest(ResultSet rs){
ResultSetMetaData rsm;//元数据
try{
rsm=rs.getMetaData();//获取元数据会抛出SQL异常,需要扑获
int zdzs=rsm.getColumnCount();//第二步获取结果集中字段总数
types=new int[zdzs];//初始化数组长度为结果集的字段数量
for(int i=0;i<zdzs;i++){//循环取出字段类型,并填充到数组中,然后根据字段类型使用GETxxx方法得到数据。
/*
* 因为ResultSetMetaData.getColumnType(int index)中的index索引是从1开始,所以需要加上1。
*/
types [i]=rsm.getColumnType(i+1);
System.out.println(types [i]);
switch(types[i]){
case Types.ARRAY:
Array ar=rs.getArray(i+1);
break;
case Types.BIGINT:
Number f=rs.getBigDecimal(i+1);
break;
case Types.BIT:
boolean b=rs.getBoolean(i+1);
break;
//....后面省略了,你自己写吧。
}
}
}catch(SQLException se){
se.printStackTrace();
}
}
}
package tests;
import java.sql.Array;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
public final class JdbcTest {
/*
* 这里只写出关键代码,默认构造方法需要传入参数ResultSet
*/
int [] types;//定一个数组,用于存放获得的字段类型。
public JdbcTest(ResultSet rs){
ResultSetMetaData rsm;//元数据
try{
rsm=rs.getMetaData();//获取元数据会抛出SQL异常,需要扑获
int zdzs=rsm.getColumnCount();//第二步获取结果集中字段总数
types=new int[zdzs];//初始化数组长度为结果集的字段数量
for(int i=0;i<zdzs;i++){//循环取出字段类型,并填充到数组中,然后根据字段类型使用GETxxx方法得到数据。
/*
* 因为ResultSetMetaData.getColumnType(int index)中的index索引是从1开始,所以需要加上1。
*/
types [i]=rsm.getColumnType(i+1);
System.out.println(types [i]);
switch(types[i]){
case Types.ARRAY:
Array ar=rs.getArray(i+1);
break;
case Types.BIGINT:
Number f=rs.getBigDecimal(i+1);
break;
case Types.BIT:
boolean b=rs.getBoolean(i+1);
break;
//....后面省略了,你自己写吧。
}
}
}catch(SQLException se){
se.printStackTrace();
}
}
}
展开全部
如果要用户输入查询语言,不如写多一些功能,让用户选择,然后在执行语句得出结果,这可能会好点,不竟有些用户不懂得sql语法.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你为什么不直接让用户写要查询的东西呢,而你把他要查询的东西接受不行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用preparedStatemt 用法你可以查API
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你帮他们的意思串起来 ,好好想想,就可以拉!主要靠你自己拉!
加油哦!
加油哦!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你应该再进行需求分析,,,,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询