再请教各位一个问题

jjzzggkk 2016-06-03 12:56:50
我是根据教程利用odbc做驱动通过jdbc连接sqlserver2008数据库的,数据表已经建立好,odbc加载驱动是成功的,数据库也连接上了,编写的java代码也没有报错,但是就是不能正常运行添加数据,提示是空异常,纠结了好久没能解决,所以在此拜托各位帮个忙解决一下。在此,表示感谢。以下是代码:
用户类
package odbc;
public class User {
private int id;
private String userName;
private String passWord;
private int roleId;
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassWord() {
return passWord;
}

public void setPassWord(String passWord) {
this.passWord = passWord;
}

public int getRoleId() {
return roleId;
}

public void setRoleId(int roleId) {
this.roleId = roleId;
}

public User(){

}

public User(int id, String userName, String passWord, int roleId) {
super();
this.id = id;
this.userName = userName;
this.passWord = passWord;
this.roleId = roleId;
}

@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", passWord="
+ passWord + ", roleId=" + roleId + "]";
}
}
main主函数
package odbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class demo01 {
private Connection conn;
private Statement stat;
public static void main(String[] args) {
new demo01().startup();
}
private void startup(){
init();
//添加一个用户
User user = new User(1, "zhang", "111", 1);
addUser(user);

}
private void addUser(User user) {
String sql = String.format("insert into T_User values('%s','%s',%s)",
user.getUserName(), user.getPassWord(), user.getRoleId());
try {
stat = conn.createStatement();
int result = stat.executeUpdate(sql);

if (result > 0) {
System.out.println("添加用户成功!");
} else {
System.out.println("添加用户失败!");
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
stat.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void init(){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("加载驱动成功");
//该语句冒号前面是固定的,冒号后面是自己定义的数据源
String url = "jdbc:odbc:bookshopsource";
Connection conn = DriverManager.getConnection(url);
System.out.println("数据库连接成功");
} catch (ClassNotFoundException e) {
System.out.println("加载驱动失败");
return;
}catch (SQLException e) {
System.out.println("数据库连接失败");
return;
}
}
}

SQL server2008 经过测试是没问题的

不知道为什么在java添加操作就报空异常了,无法添加数据
...全文
107 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31975437 2016-06-03
  • 打赏
  • 举报
回复
什么都不说了,给你上代码
/**
 * 程序运行起来后:
 * 首先输出:欢迎注册
 * 顺序提示用户输入用户名,密码,邮箱
 * 完成注册功能。
 * 主键由序列生成,账户默认50000
 * 
 * @author Administrator
 *
 */
public class JDBCdeme1 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("欢迎注册");
		System.out.println("请输入用户名:");
		String username = scanner.nextLine();
		System.out.println("请输入密码:");
		String password = scanner.nextLine();
		System.out.println("请输入邮箱:");
		String email = scanner.nextLine();
		
		Connection conn = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(
				"jdbc:oracle:thin:@10.145.206.8:1521:oraida",
				"sh_ida",
				"marconi"
			);
			Statement state = conn.createStatement();
		
			/*
			 * INSERT INTO userinfo
			 * (id,username,password,email,account)
			 * VALUES
			 * (seq_userinfo_id.NEXTVAL,'JACK','123456','JACK@qq.com',50000)
			 */
			String sql 
			  = "INSERT INTO userinfo "+
			    "(id,username,password,email,account) "+
				"VALUES "+
			    "(seq_userinfo_id.NEXTVAL,'"+username+"', "+
				" '"+password+"','"+email+"',50000)";
			/*
			 * int executeUpdate(String sql)
			 * 该方法用来执行DML语句,返回值为执行后
			 * 影响了表中多少条数据。
			 * JDBC默认自动提交事务,所以插入就真的
			 * 插入到表中了!
			 */
			int n = state.executeUpdate(sql);
			if(n>0){
				System.out.println("注册成功");
			}else{
				System.out.println("注册失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

  • 打赏
  • 举报
回复
Connection conn = DriverManager.getConnection(url);改成 conn = DriverManager.getConnection(url)。 另外连数据库不用用户名密码的吗?DriverManager.getConnection(url,name,pwd),一般是这么连的吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧