
在eclipse中需要自定义创建表工具类:
比如;
1、写一个DBHelper继承自SQLiteOpenHelper
public class DBHelper extends SQLiteOpenHelper{
//数据库的版本
private final static int DB_VERSION = 1
//数据库名
private final static String DB_NAME = "ladeng.db"
private Context mContext
//我们直接用super调用父类的构造方法,这样我们在实例化DBHelper的时候只需要传入一个上下文参数就可以了
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION)
this.mContext = context
}
//数据库不存在的时候,调用这个方法
@Override
public void onCreate(SQLiteDatabase db) {
createTables(db,0,0)
}
//版本号发生变化的时候,调用这个方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//1.删除原来的表
//2.调用onCreate重新创建数据库
}
/**
* 建表语句,只需要一行就能建一个表
*/
private void createTables(SQLiteDatabase db, int oldVersion, int newVersion) {
//createTable(Movie.class)返回的是sql建表语句
//db.execSQL(sql) 执行这条建表语句
db.execSQL(createTable(Movie.class))
}
/**
* 如果没传表明的话,默认使用类名作为表明
* @param clazz 实体类
* @return
*/
private <T>String createTable(Class<T>clazz){
return createTable(clazz, clazz.getSimpleName())
}
/**
* 真正的建表方法
* @param clazz 实体类
* @param tableName 表明
* @return sql建表语句
*/
private <T>String createTable(Class<T>clazz , String tableName){
//实例化一个容器,用来拼接sql语句
StringBuffer sBuffer = new StringBuffer()
//sql语句,第一个字段为_ID 主键自增,这是通用的,所以直接写死
sBuffer.append("create table if not exists "+ tableName + " "+
"(_ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,")
//得到实体类中所有的公有属性
Field[] fields = clazz.getFields()
//遍历所有的公有属性
for(Field field : fields){
//如果属性不为_id的话,说明是新的字段
if (!field.getName().equals("_id")) {
//得到属性的基本数据类型
String type = field.getType().getSimpleName()
//如果是String类型的属性,就把字段类型设置为TEXT
if (type.equals("String")) {
sBuffer.append(field.getName()+" TEXT,")
//如果是int类型的属性,就把字段类型设置为INTEGER
}else if (type.equals("int")) {
sBuffer.append(field.getName()+" INTEGER,")
}
}
}
//将最后的逗号删除
sBuffer.deleteCharAt(sBuffer.length()-1)
//替换成)表明sql语句结束
sBuffer.append(")")
//返回这条sql语句
return sBuffer.toString()
}
}
2、Movie实体类,实体类中的属性就是表中的字段
public class Movie {
public String title
public int rating
public String year
public String genre
public String country
public int price
}
3、在MainActivity.java中添加如下代码
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//实例化我们的DBHelper
DBHelper dbHelper = new DBHelper(this)
//调用了这个方法后,DBHelper中的onCreate才会执行
dbHelper.getReadableDatabase()
}
}
4、创建结果:
1.首先安装MySql数据库,并将数据库驱动程序文件mysql-connector-java-3.1.12-bin.jar放在Tomcat的common/lib中。2.在MySQL的登陆用户名:root,密码:mysql建立数据库testdb,
3.表user 基本代码如下:
<%@ page contentType="text/htmlcharset=gb2312"%>
<%@ page language="java" import="java.sql.Statement" import="java.sql.*" %><html>
<head>
<title>helloworld.jsp</title>
</head>
<body>
<%
try{
Class.forName("org.gjt.mm.mysql.Driver")
out.println("加载Mysql Driver成功!<br>")
} catch(Exception e)
{
out.println("加载Mysql Driver失败!<br>")
e.printStackTrace()
}
try{
out.println("开始连接Mysql server!<br>")
Connection connect=DriverManager.getConnection("jdbc:mysql://localhost/testdb?user=root&password=mysql&useUnicode=true&characterEncoding=8859_1")
//jdbc:mysql://localhost/testdb?user=root&password=mysql&useUnicode=true&characterEncoding=8859_1
//jdbc:mysql://localhost/数据库名user=数据库登陆用户名&password=数据库登陆密码&useUnicode=是否允许设置字符编码&characterEncoding=允许设置编码时,要设置的编码out.print("成功连接Mysql server!<br><br>")
Statement stmt = connect.createStatement()
ResultSet rs=stmt.executeQuery("select * from user")
out.print("读取数据如下:<br>")
while(rs.next())
{
out.println(rs.getInt(1))
out.println(rs.getString(2)+"<br>")
}
} catch(Exception e)
{
out.print("获得数据错误!")
e.printStackTrace()
}
%>
</body>
</html>
4.注意:如果只写import="java.sql.*" ,不写import="java.sql.Statement" 则在Statement
stmt = connect.createStatement()其中Statement下面显示是红色波浪线,程序调用数据库等一切正常。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)