我这有个类,一直用
package comseconddao;import javalangreflectInvocationTargetException;
import javalangreflectMethod;
import javasqlConnection;
import javasqlDriverManager;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlResultSetMetaData;
import javasqlSQLException;
import javautilArrayList;
import javautilList;
public class JDBCUtilDao {
private static Connection con = null;
private static PreparedStatement ps = null;
private static ResultSet rs = null;
public static Connection PrintCon() {
return con;
}
public static PreparedStatement PrintPs() {
return ps;
}
public static ResultSet PrintRs() {
return rs;
}
/
准备驱动
/
static {
try {
ClassforName("netsourceforgejtdsjdbcDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
Systemoutprintln("加载驱动失败!");
eprintStackTrace();
}
}
public static Connection getConnection() {
try {
con = DriverManagergetConnection(
"jdbc:jtds:sqlserver://1921686110/sql_second", "sa",
"123");
// Systemoutprintln(con);
} catch (SQLException e) {
// TODO Auto-generated catch block
Systemoutprintln("连接失败!");
eprintStackTrace();
}
return con;
}
/
关闭连接
@param rs
结果集对象
@param ps
会话对象
@param con
连接对象
/
public static void closeAll(ResultSet rs, PreparedStatement ps,
Connection con) {
try {
if (null != rs) {
rsclose();
}
if (null != ps) {
psclose();
}
if (null != con) {
conclose();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
/
设置参数
@param params
@param ps
/
public static void setParams(List<String> params, PreparedStatement ps) {
if (params != null) {
for (int i = 0; i < paramssize(); i++) {
try {
pssetString(i + 1, paramsget(i));
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
}
/
实现增、删、改
@param sql
sql语句
@param params
参数
@return 修改的行数
/
public static int doUpdata(String sql, List<String> params) {
int result = 0;
try {
// 判断是否连接 不连接就把数据库连上
if (null == con || conisClosed()) {
con = getConnection();
}
// 得到会话
ps = conprepareStatement(sql);
// 设置参数
setParams(params, ps);
// 得到结果,即改变行数
result = psexecuteUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} finally {
closeAll(null, ps, con);
}
return result;
}
/
查询
@param <T>
@param sql
@param params
@param t
@return
/
public static <T> List<T> qureyAll(String sql, List<String> params,
Class<T> t) {
// 用一个集合接受返回的数据
List<T> list = new ArrayList<T>();
// 判断是否连接
try {
if (null == con || conisClosed()) {
con = getConnection();
}
// *** 作对象
ps = conprepareStatement(sql);
// 设置参数
setParams(params, ps);
// 返回结果集
rs = psexecuteQuery();
// 取出t中的说有方法
Method[] method = tgetDeclaredMethods();
// 取出说有列名和列数
ResultSetMetaData rsmd = rsgetMetaData();
// 获得列数
int count = rsmdgetColumnCount();
// 取出每个列列名放入数组中
String[] columns = new String[count];
for (int i = 0; i < columnslength; i++) {
columns[i] = rsmdgetColumnName(i + 1);
}
// 循环结果集
while (rsnext()) {
T s = (T) tnewInstance();
// 第一个循环控制列数
for (int i = 0; i < columnslength; i++) {
// 第二个循环控制方法名
for (int j = 0; j < methodlength; j++) {
String setName = "set" + columns[i];
if (setNameequalsIgnoreCase(method[j]getName())) {// set+列名相同就是这个类得方法名
String typeName = rsmdgetColumnTypeName(i + 1);// 得到数据库中列名的类型
// int
// varchar
//Systemoutprintln(typeName);
if (typeNameequals("INTEGER")
|| typeNameequals("int identity")
|| typeNameequals("int")) {
method[j]invoke(s, rsgetInt(columns[i]));
} else if (typeNameequals("DECIMAL")) {
method[j]invoke(s, rsgetDouble(columns[i]));
} else if (typeNameequals("VARCHAR2")) {
method[j]invoke(s, rsgetString(columns[i]));
} else if (typeNameequals("money")) {
method[j]invoke(s, rsgetFloat(columns[i]));
} else if (typeNameequals("datetime")) {
// Systemoutprintln(rsgetTimestamp(columns[i]));
method[j]
invoke(s, rsgetTimestamp(columns[i]));
} else {
method[j]invoke(s, rsgetString(columns[i]));
}
}
}
}
listadd(s);
}
closeAll(rs, ps, con);
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return list;
}
/
查询
@param sql
@param obj
@return
/
public static ResultSet getInfoos(String sql, Object[] temp) {
ResultSet rs = null;
try {
if (con == null || conisClosed()) {
getConnection();
}
ps = conprepareStatement(sql);
for (int i = 1; i < templength; i++) {
pssetObject(i, temp[i]);
}
rs = psexecuteQuery();
} catch (SQLException e) {
eprintStackTrace();
}
return rs;
}
public static void main(String[] args) {
// JDBCUtilDemo jd = new JDBCUtilDemo();
// Systemoutprintln(jdgetConnection());
// if(jdupdateByUserId("8888" )){
// Systemoutprintln("OK");
// }else{
// Systemoutprintln("NO");
// }
}
}
Java连接数据库,要删除指定行的信息,可以使用delete语句,传入某行的参数,示例如下:
public class Update1 {public static void main(String[] args) throws ClassNotFoundException, SQLException {
ClassforName("sunjdbcodbcJdbcOdbcDriver");//加载SQL SERVER数据库
Connection con = DriverManagergetConnection("jdbc:odbc:tt", "sa", ">
javasqlSQLException: Failed to access a closed resultSet:此语句翻译为:javasqlSQLException包抛出异常(内容为):错误的连接了一个已关闭的结果集对象。根据异常类型推断,你在执行删除 *** 作后,resultset 错误关闭。仔细查看下 resultset 处理语句。
我刚写了一个只有插入的,望采纳
import javasql;
import javautil;
public class TestPre {
public static void main(String[] args) {
int i=0,deptno=0;//i只做while循环使用,deptno是表dept2中的一个属性,类型是int
String dname=null,loc=null;//dname和loc也是表dept2的属性,类型是String
Scanner s=new Scanner(Systemin);
Systemoutprintln("请输入3个参数");
while(i<3){
try{
deptno=snextInt();
i++;
dname=snext();
i++;
loc=snext();
i++;
}catch(InputMismatchException e){
Systemoutprintln("输入的类型不符,退出");
Systemexit(-1);
}
}
Connection conn=null;
PreparedStatement pstmt=null;
try {
ClassforName("commysqljdbcDriver");
conn = DriverManagergetConnection("jdbc:mysql://localhost/mydata"+ "user=root&password=root");
pstmt=connprepareStatement("insert into dept2 values(,,)");
pstmtsetInt(1, deptno);
pstmtsetString(2, dname);
pstmtsetString(3, loc);
pstmtexecuteUpdate();
Systemoutprintln("插入完成");
} catch (ClassNotFoundException e) {
Systemoutprintln("连接数据库不成功,程序退出");
Systemexit(-1);
} catch (SQLException e) {
Systemoutprintln("连接数据库不成功,程序退出");
Systemexit(-1);
}
finally{
try{
if(pstmt!=null){
pstmtclose();
pstmt=null;
}
if(conn!=null){
connclose();
conn=null;
}
}catch(SQLException e){
eprintStackTrace();
}
}
}
}
不用把取到的所有id拼成一个DELETE语句
比如
String sql="SELECT FROM 表名 WHERE ";
String sql2="DELETE FROM 表名 WHERE ";
你把后面的星号里的东西弄成一样的 这样你先执行第一句 然后再执行第二句
前提是你别用联合查询什么的 这样会出问题
import javasql;
public static void main(String[] args){
String username="";
String password="";
Connection con;
Statement statement;
ResultSet rs;
String query,key;
int id;
String url="jdbc:odbc:spamfilter";
try{
ClassforName("sunjdbcodbcJdbcOdbDriver");
}catch(ClassNotFoundException e){
Systemoutprintln("没有找到指定的驱动!");
}
try{
con=DriverManagergetConnection(url,username,password);
statement=concreateStatement();
query="insert into Other1(key)"+"values('观音GG')"
//由于你的id设为primary,so不用再添加id字段
statement=exceuteUpdate(query);
query="select from Other1";
rs=statementexecuteQuery(query);
while(rsnext()){
id=rsgetInt("id");
key=rsgetString("key");
Systemoutprintln("id:"+id);
Systemoutprintln("key:"+key);
}
}
catch(SQLException e){
Systemoutprintln("程序出现异常!");
eprintStackTrace();//打印错误信息
}
finally{
try{
if(rs!=null)rsclose();
if(statement!=null)statementclose();
if(con!=null)conclose();
}
catch(SQLException e){
eprintStackTrace();
}
}
}
}
以上就是关于怎么用java向数据库中添加和删除数据全部的内容,包括:怎么用java向数据库中添加和删除数据、用JAVA怎么删除SQL表格中指定一行的信息、java jdbc 删除数据库表中一列后不能用SQL语句在更新和查询表中其他数据了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)