关于JAVA连接SQL数据库的问题

//执行SQL语句,有可能是select、insert、update、delete语句中的任何一个,要对参数sql先进行判断,再分类处理:如为查询语句,需将结果集中的所有... //执行SQL语句,有可能是select、insert、update、delete语句中的任何一个,要对参数sql先进行判断,再分类处理:如为查询语句,需将结果集中的所有行、列数据显示输出;若是增删改语句,除执行对应操作外,还要输出“增加(修改、删除)xx条记录”。
public void execute(Connection connString, String sql){
….
}
}
最后,请你创建一个DBTest类,使用有关参数和SQL语句来操作一个具体的数据库,以检验DB类的功能。
(提示:
① 可调用String类startsWith(String prefix)方法来判断sql参数是属于select、insert、update、delete语句中的哪一种,再执行对应操作;
②执行查询语句时,要输出结果集的内容,这需要用到输出列的数目、名称或序号、各列的数据类型等内容。由于select语句是以参数方式提供,编写程序时无法得到有关信息,可求助“元数据”来实现,由ResultSet对象调用getMetaData()方法可得到 ResultSetMetaData对象,通过ResultSetMetaData对象的getColumnCount()可得到select语句查询的列数,之后用ResultSet对象调用getObject(int columnIndex)可得到各列数据(参数是列序号,从1开始),
这个是原题目 我自己做到
public void execute(Connection connString, String sql) throws Exception{
int a=0;

if(sql.startsWith("select")){
stmt=connString.createStatement();
rs=stmt.executeQuery(sql);
ResultSetMetaData rsMeta = rs.getMetaData();
int b= rsMeta.getColumnCount();
MyDB[] db=new MyDB[b+1];
for(int i=1; i<=b; i++)
{
db[i].name = rsMeta.getColumnName(i);
System. out.print(db[i].name+"\t");
if(rsMeta.getColumnTypeName(i).indexOf("char")>=0)
{

}
}

}
else{
stmt=connString.createStatement();
a=stmt.executeUpdate(sql);
if(a>0)
{
System.out.println("成功增加(修改、删除)"+a+"条记录");
}
else{
System.out.println("失败鸟");
}

}
就是显示列呢里不回 之后用ResultSet对象调用getObject(int columnIndex)可得到各列数据(参数是列序号,从1开始),
这个不懂.. 求高手解答 谢谢了
展开
 我来答
hbchiyufeng
2011-03-16
知道答主
回答量:33
采纳率:0%
帮助的人:0
展开全部
package opinion.internet.hongming.net.until.tools;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import java.util.List;

/**
* 所有DAO的父类(提供通用CRUD方法)
* @author Administrator
*
*/
public class BaseJdbcDao {

//定义数据库连接常量
private static final String DRIVER
= "net.sourceforge.jtds.jdbc.Driver";
private static final String URL
= "jdbc:jtds:sqlserver://127.0.0.1:1433/DISCDB";
private static final String USER
= "sa";
private static final String PASS
= "123456";

private Connection con = null;
private PreparedStatement pstmt = null;
private Statement stmt = null;

//设置sql语句
private String sql = null;
public String getSql() {
return sql;
}
protected void setSql(String sql) {
this.sql = sql;
}

//设置一个存储sql参数(值)的集合
private List params = null;
public List getParams() {
return params;
}
protected void setParams(List params) {
this.params = params;
}

/**
* CRUD sql语句传参函数
* @param pstmt
* @param params
*/
private void setSqlParams(PreparedStatement pstmt,List params)
throws Exception
{
for(int i=0;i<params.size();i++){
pstmt.setObject(i+1, params.get(i));
}
}

/**
* 打开连接
* @throws Exception
*/
private void openCon() throws Exception{
Class.forName(DRIVER);
con = DriverManager.getConnection(URL,USER,PASS);
}

/**
* 关闭all对象使用的Connection对象
* @throws Exception
*/
protected void closeCon() throws Exception{
if(null!=this.con && !this.con.isClosed())
con.close();
}

/**
* 关闭结果集
* @param rs
* @throws Exception
*/
protected void closeResultSet(ResultSet rs) throws Exception{
if(null != rs)
rs.close();
}

/**
* 关闭语句对象
* @throws Exception
*/
protected void closeStatement() throws Exception{
if(null != this.stmt){
this.stmt.close();
}
if(null != this.pstmt){
this.pstmt.close();
}
}

/**
* 通用查询(无参|带参)
* @return 查询结果集
* @throws Exception
*/
protected ResultSet executeQuery() throws Exception{
ResultSet rs = null;
if(null==con || con.isClosed())
this.openCon();

//有参数sql查询
if(params!=null && params.size()>0){
pstmt = con.prepareStatement(sql);
this.setSqlParams(pstmt,params); //sql语句传参
rs = pstmt.executeQuery();
}
//无参数sql查询
else{
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
}

return rs;

}// the END of executeQuery method

}

通用的sql方法 你要执行什么操作 直接写sql语句调用该方法就OK了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户82313
2011-03-17 · 超过36用户采纳过TA的回答
知道答主
回答量:147
采纳率:0%
帮助的人:0
展开全部
数据库的表格的时候,添加一项身份标志列。比如列名叫info
如果在用户登陆时候查询用户的同时可以在查询一下info的值,(假设--如果值为0,就表示普通用户,如果用户存在可以跳转相应的页面如loginsuceful.jsp,可以进行查询操作;如果是1就表示为管理员,如果用户存在可以跳转相应的页面如managersuceful.jsp,可以进行查询操作和添加操作甚至也可以有删除或者修改的权限),这样就解决了这个问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-21
展开全部
之后用ResultSet对象调用getObject(int columnIndex)可得到各列数据(参数是列序号,从1开始)
就是说,你要执行的sql语句,比如select 语句。执行完了返回的数据,数据是像表格一样的结构,你要得到第几行,就把int columnIndex设成几。
你可以把sql语句放到数据库软件的客户端里面执行一下,就能看到返回的数据是个什么结构,比较形象一点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沈阳java
2011-03-16 · TA获得超过1507个赞
知道小有建树答主
回答量:797
采纳率:50%
帮助的人:682万
展开全部
如果你需要取出数据的话,可以用getObject得到的。ResultSetMetaData中装元数据信息,ResultSet中装数据信息。
也就是相当于表格标题、表头、大小等信息在ResultSetMetaData中
表格中的每行数据在ResultSet。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式