刚接触Android开发,请问在每次试图运行项目时出错,SQLite数据库都会在手机上新建数据库吗?

网站已改版,请使用新地址访问:
LoginWithSQLite android 系统下采用 数据库实现登陆注册功能,并且能在本地建立
238万源代码下载-
&文件名称: LoginWithSQLite
& & & & &&]
&&所属分类:
&&开发工具: Java
&&文件大小: 360 KB
&&上传时间:
&&下载次数: 9
&&提 供 者:
&详细说明:android 系统下采用SQLite数据库实现登陆注册功能,并且能在本地建立数据库-Sign In using SQLite database implementation functions under the android system, and to establish a database on the local
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&LoginWithSQLite\DateWithMe.rar&&...............\innosen.blogspot.in.txt&&LoginWithSQLite
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - Android应用程序通常都要依赖数据存储,而且这种存储必须不丢失数据,并且能够有效、简便的使用和更新这些数据。本例实现了在Android环境下通过Shared Preferences方式来存储 “键-值”格式的数据。
&[] - java实现的多人聊天程序,可以显示多个窗口,利用多线程
&[] - Complete description of the AndroidManifest.xml structure.
&[] - Exercises android.view.View s ability to change visibility between GONE, VISIBLE and INVISIBLE.
&[] - android实现登陆注册的功能,代码清新明了,内附数据库数据。。。
&[] - Android手机SQLite数据库的登陆程序,包含了成员的增加、删除、查找等功能。
&[] - 这是我自己封装的android平台下的sql数据库,大家参考下可以直接调用
&[] - 高通AR增强现实Unity3D
vuforia-sdk-android-3-0-9用于安卓手机开发
&[] - 类似点餐的手机软件 可以装在pad上在餐馆替代纸质菜单的作用android开发怎么备份sqlite数据库?
1.可以使用这个SQLITE MANAGER 来备份 2.也可以在eclipse,创建APP,写代码来备份。
1.可以使用这个SQLITE MANAGER 来备份
2.也可以在eclipse,创建APP,写代码来备份。
(责任编辑:huang)
------分隔线----------------------------
打开cmd命令行,在命令输入java -jar 路径/re-siger.jar 把需要重新签名apk文件,拖拽...
xml version = 1.0 encoding = utf-8 ? manifest uses-permission / permission / per...
php mysql 建数据库 ?php $con=mysqli_,username,password); $sql...
1 下载wamp 软件,安装 2 php mysql 这些要配置好 。 ?php...
很多大网站在谈技术的时候,总是很多多余的话,然后看了老半天,才告诉你怎么做。 roo...
如果你自己做项目,要选择一些自己适合的,而且能够收入的。 假如你做一些什么ERP,财...您所在的位置: &
Android开发中SQLite数据库的使用
Android开发中SQLite数据库的使用
Android 提供了三种数据存储方式,第一种是文件存储;第二种是SharedPreferences存储;第三种就是数据库SQLiteDatabase存储。文件存储我就不用多说了,而SharedPreferences可以存取简单的数据(int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。下面主要介绍一下Android开发SQLite数据库。
本文介绍了Android开发SQLite数据库的使用。希望对你有所帮助。
SQLite 介绍
SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.
SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。
图 1. SQLite 内部结构
SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。
SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE
语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite
将检查它的类型。如果该类型与关联的列不匹配,则 SQLite
会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER
列。SQLite 称这为&弱类型&(manifest typing.)。
此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套
transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能。
除了上述功能外,SQLite 是一个完整的 SQL 系统,拥有完整的触发器,交易等等。
Android 集成了 SQLite 数据库
Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite
数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC
会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite
数据库,Android 开发中,程序员需要学使用这些 API。
数据库存储在 data/& 项目文件夹 &/databases/ 下。
Android 开发中使用 SQLite 数据库
Activites 可以通过 Content Provider 或者 Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。
创建数据库
Android 不自动提供数据库。在 Android 应用程序中使用
SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper
帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper
类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:
public&class&DatabaseHelper&extends&SQLiteOpenHelper&{&&&&&&&DatabaseHelper(Context&context,&String&name,&CursorFactory&cursorFactory,&int&version)&&&{&&&&&&&&&super(context,&name,&cursorFactory,&version);&&&&&&&&&&}&&&&&&&&&&&&&&&@Override&&&&&&&&&public&void&onCreate(SQLiteDatabase&db)&{&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&@Override&&&&&public&void&onUpgrade(SQLiteDatabase&db,&int&oldVersion,&int&newVersion)&{&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&@Override&&&&&public&void&onOpen(SQLiteDatabase&db)&{&&&&&&&&&&&&&&super.onOpen(db);&&&&&&&&&&&&&&&&&&&&&}&&&&&&}&&
接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:
db=(new&DatabaseHelper(getContext())).getWritableDatabase();&&return&(db&==&null)&?&false&:&true;&&
上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。
当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。
创建表和索引
为了创建表和索引,需要调用 SQLiteDatabase 的 execSQL() 方法来执行 DDL 语句。如果没有异常,这个方法没有返回值。
例如,你可以执行如下代码:
db.execSQL(&CREATE&TABLE&mytable&(_id&INTEGER&PRIMARY&KEY&&&&&&&&&&&AUTOINCREMENT,&title&TEXT,&value&REAL);&);&&
这条语句会创建一个名为 mytable 的表,表有一个列名为
_id,并且是主键,这列的值是会自动增长的整数(例如,当你插入一行时,SQLite 会给这列自动赋值),另外还有两列:title( 字符 ) 和
value( 浮点数 )。 SQLite 会自动为主键列创建索引。
通常情况下,第一次创建数据库时创建了表和索引。如果你不需要改变表的 schema,不需要删除表和索引 . 删除表和索引,需要使用 execSQL() 方法调用 DROP INDEX 和 DROP TABLE 语句。
给表添加数据
上面的代码,已经创建了数据库和表,现在需要给表添加数据。有两种方法可以给表添加数据。
像上面创建表一样,你可以使用 execSQL() 方法执行 INSERT, UPDATE, DELETE 等语句来更新表的数据。execSQL() 方法适用于所有不返回结果的 SQL 语句。例如:
db.execSQL(&INSERT&INTO&widgets&(name,&inventory)&+&&VALUES&('Sprocket',&5)&);&&
另一种方法是使用 SQLiteDatabase 对象的 insert(), update(), delete() 方法。这些方法把 SQL 语句的一部分作为参数。示例如下:
ContentValues&cv=new&ContentValues();&&cv.put(Constants.TITLE,&&example&title&);&&cv.put(Constants.VALUE,&SensorManager.GRAVITY_DEATH_STAR_I);&&db.insert(&mytable&,&getNullColumnHack(),&cv);&&
update()方法有四个参数,分别是表名,表示列名和值的 ContentValues 对象,可选的 WHERE 条件和可选的填充
WHERE 语句的字符串,这些字符串会替换 WHERE 条件中的&?&标记。update() 根据条件,更新指定列的值,所以用
execSQL() 方法可以达到同样的目的。
WHERE 条件和其参数和用过的其他 SQL APIs 类似。例如:
String[]&parms=new&String[]&{&this&is&a&string&};&&db.update(&widgets&,&replacements,&&name=?&,&parms);&
delete() 方法的使用和 update() 类似,使用表名,可选的 WHERE 条件和相应的填充 WHERE 条件的字符串。
查询数据库
类似 INSERT, UPDATE, DELETE,有两种方法使用 SELECT 从 SQLite 数据库检索数据。
使用 rawQuery() 直接调用 SELECT 语句;
使用 query() 方法构建一个查询。
Raw Queries
正如 API 名字,rawQuery() 是最简单的解决方法。通过这个方法你就可以调用 SQL SELECT 语句。例如:
Cursor&c=db.rawQuery(&&&&&&&SELECT&name&FROM&sqlite_master&WHERE&type='table'&AND&name='mytable'&,&null);&
在上面例子中,我们查询 SQLite 系统表(sqlite_master)检查 table 表是否存在。返回值是一个 cursor 对象,这个对象的方法可以迭代查询结果。
如果查询是动态的,使用这个方法就会非常复杂。例如,当你需要查询的列在程序编译的时候不能确定,这时候使用 query() 方法会方便很多。
Regular Queries
query() 方法用 SELECT 语句段构建查询。SELECT 语句内容作为 query()
方法的参数,比如:要查询的表名,要获取的字段名,WHERE 条件,包含可选的位置参数,去替代 WHERE 条件中位置参数的值,GROUP BY
条件,HAVING 条件。
除了表名,其他参数可以是 null。所以,以前的代码段可以可写成:
String[]&columns={&ID&,&&inventory&};&&&String[]&parms={&snicklefritz&};&&&Cursor&result=db.query(&widgets&,&columns,&&name=?&,parms,&null,&null,&null);&
不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你可以:
通过使用 getCount() 方法得到结果集中有多少记录;
通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;
通过 getColumnNames() 得到字段名;
通过 getColumnIndex() 转换成字段号;
通过 getString(),getInt() 等方法得到给定字段当前记录的值;
通过 requery() 方法重新执行查询得到游标;
通过 close() 方法释放游标资源;
例如,下面代码遍历 mytable 表
Cursor&result=db.rawQuery(&SELECT&ID,&name,&inventory&FROM&mytable&);&&&&&result.moveToFirst();&&&&&while&(!result.isAfterLast())&{&&&&&&&&&int&id=result.getInt(0);&&&&&&&&&String&name=result.getString(1);&&&&&&&&&int&inventory=result.getInt(2);&&&&&&&&&&&&&&&&&result.moveToNext();&&&&&&&}&&&&&&&result.close();&&
在 Android 中使用 SQLite 数据库管理工具
在其他数据库上作开发,一般都使用工具来检查和处理数据库的内容,而不是仅仅使用数据库的 API。使用 Android 模拟器,有两种可供选择的方法来管理数据库。
首先,模拟器绑定了 sqlite3 控制台程序,可以使用 adb shell 命令来调用他。只要你进入了模拟器的 shell,在数据库的路径执行 sqlite3 命令就可以了。数据库文件一般存放在:
/data/data/your.app.package/databases/your-db-name
如果你喜欢使用更友好的工具,你可以把数据库拷贝到你的开发机上,使用 SQLite-aware 客户端来操作它。这样的话,你在一个数据库的拷贝上操作,如果你想要你的修改能反映到设备上,你需要把数据库备份回去。
把数据库从设备上考出来,你可以使用 adb pull 命令(或者在 IDE 上做相应操作)。存储一个修改过的数据库到设备上,使用 adb push 命令。
一个最方便的 SQLite 客户端是 FireFox SQLite Manager 扩展,它可以跨所有平台使用。
图 2. SQLite Manager
如果你想要开发 Android 应用程序,一定需要在 Android 上存储数据,使用 SQLite
数据库是一种非常好的选择。本文介绍了如何在 Android 应用程序中使用 SQLite 数据库 ,主要介绍了在 Android 应用程序中使用
SQLite 创建数据库和表、添加数据、更新和检索数据,还介绍了比较常用的 SQLite 管理工具,通过阅读本文,你可以在Android开发SQLite数据库时轻松操作。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
《Google Android SDK开发范例大全》全书以范例作为切入角度,由
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
在百年老店诺基亚和我们依依惜别之后,上周我们又迎来
大家都知道iOS的发展之迅速,这对于开发者来说,无疑
越来越多的web设计师提出了移动优先的口号,而随着硬
数据库技术是计算机科学中一个重要的组成部分,它正在以日新月异的速度发展。数据库的基本原理和应用技术已经成为高等院校的学生
Windows Phone专家
Android开发专家
51CTO旗下网站Android数据库SQLite的使用示例
Android 提供了三种数据存储方式,第一种是文件存储;第二种是SharedPreferences存储;第三种就是数据库SQLiteDatabase存储。文件存储我就不用多说了,而SharedPreferences可以存取简单的数据(int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。详细可以参见本系列。Android高手进阶教程(七)之----Android 中Preferences的使用!
今天我们将讲一下SQLiteDatabase的使用。而掌握SqliteDatabase,将会我们接下来掌握ContentProvider打下良好的基石。为了让大家更好的掌握,我们手把手完成该节的Demo。
第一步:新建一个Android工程,命名为SQLiteDatabaseDemo.
第二步:创建一个新的类BooksDB.java这个类要继承于android.database.sqlite.SQLiteOpenHelper抽象类,我们要实现其中两个方法:onCreate(),onUpdate.具体代码如下:
package com.android.
import android.content.ContentV
import android.content.C
import android.database.C
import android.database.sqlite.SQLiteD
import android.database.sqlite.SQLiteOpenH
public class BooksDB extends SQLiteOpenHelper {
private final static String DATABASE_NAME = &BOOKS.db&;
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NAME = &books_table&;
public final static String BOOK_ID = &book_id&;
public final static String BOOK_NAME = &book_name&;
public final static String BOOK_AUTHOR = &book_author&;
public BooksDB(Context context) {
// TODO Auto-generated constructor stub
super(context, DATABASE_NAME, null, DATABASE_VERSION);
//创建table
public void onCreate(SQLiteDatabase db) {
String sql = &CREATE TABLE & + TABLE_NAME + & (& + BOOK_ID
+ & INTEGER primary key autoincrement, & + BOOK_NAME + & text, &+ BOOK_AUTHOR +& text);&;
db.execSQL(sql);
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = &DROP TABLE IF EXISTS & + TABLE_NAME;
db.execSQL(sql);
onCreate(db);
public Cursor select() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db
.query(TABLE_NAME, null, null, null, null, null, null);
//增加操作
public long insert(String bookname,String author)
SQLiteDatabase db = this.getWritableDatabase();
/* ContentValues */
ContentValues cv = new ContentValues();
cv.put(BOOK_NAME, bookname);
cv.put(BOOK_AUTHOR, author);
long row = db.insert(TABLE_NAME, null, cv);
//删除操作
public void delete(int id)
SQLiteDatabase db = this.getWritableDatabase();
String where = BOOK_ID + & = ?&;
String[] whereValue ={ Integer.toString(id) };
db.delete(TABLE_NAME, where, whereValue);
//修改操作
public void update(int id, String bookname,String author)
SQLiteDatabase db = this.getWritableDatabase();
String where = BOOK_ID + & = ?&;
String[] whereValue = { Integer.toString(id) };
ContentValues cv = new ContentValues();
cv.put(BOOK_NAME, bookname);
cv.put(BOOK_AUTHOR, author);
db.update(TABLE_NAME, cv, where, whereValue);
第三步:修改main.xml布局如下,由两个EditText和一个ListView组成,代码如下:
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:orientation=&vertical&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:id=&@+id/bookname&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
&/EditText&
android:id=&@+id/author&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
&/EditText&
android:id=&@+id/bookslist&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
&/ListView&
&/LinearLayout&
第四步:修改SQLiteDatabaseDemo.java代码如下:
package com.android.
import android.app.A
import android.content.C
import android.database.C
import android.os.B
import android.view.M
import android.view.MenuI
import android.view.V
import android.view.ViewG
import android.widget.AdapterV
import android.widget.BaseA
import android.widget.EditT
import android.widget.ListV
import android.widget.TextV
import android.widget.T
public class SQLiteDatabaseDemo extends Activity implements AdapterView.OnItemClickListener {
private BooksDB mBooksDB;
private Cursor mC
private EditText BookN
private EditText BookA
private ListView BooksL
private int BOOK_ID = 0;
protected final static int MENU_ADD = Menu.FIRST;
protected final static int MENU_DELETE = Menu.FIRST + 1;
protected final static int MENU_UPDATE = Menu.FIRST + 2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setUpViews();
public void setUpViews(){
mBooksDB = new BooksDB(this);
mCursor = mBooksDB.select();
BookName = (EditText)findViewById(R.id.bookname);
BookAuthor = (EditText)findViewById(R.id.author);
BooksList = (ListView)findViewById(R.id.bookslist);
BooksList.setAdapter(new BooksListAdapter(this, mCursor));
BooksList.setOnItemClickListener(this);
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, MENU_ADD, 0, &ADD&);
menu.add(Menu.NONE, MENU_DELETE, 0, &DELETE&);
menu.add(Menu.NONE, MENU_DELETE, 0, &UPDATE&);
public boolean onOptionsItemSelected(MenuItem item)
super.onOptionsItemSelected(item);
switch (item.getItemId())
case MENU_ADD:
case MENU_DELETE:
case MENU_UPDATE:
public void add(){
String bookname = BookName.getText().toString();
String author = BookAuthor.getText().toString();
//书名和作者都不能为空,或者退出
if (bookname.equals(&&) || author.equals(&&)){
mBooksDB.insert(bookname, author);
mCursor.requery();
BooksList.invalidateViews();
BookName.setText(&&);
BookAuthor.setText(&&);
Toast.makeText(this, &Add Successed!&, Toast.LENGTH_SHORT).show();
public void delete(){
if (BOOK_ID == 0) {
mBooksDB.delete(BOOK_ID);
mCursor.requery();
BooksList.invalidateViews();
BookName.setText(&&);
BookAuthor.setText(&&);
Toast.makeText(this, &Delete Successed!&, Toast.LENGTH_SHORT).show();
public void update(){
String bookname = BookName.getText().toString();
String author = BookAuthor.getText().toString();
//书名和作者都不能为空,或者退出
if (bookname.equals(&&) || author.equals(&&)){
mBooksDB.update(BOOK_ID, bookname, author);
mCursor.requery();
BooksList.invalidateViews();
BookName.setText(&&);
BookAuthor.setText(&&);
Toast.makeText(this, &Update Successed!&, Toast.LENGTH_SHORT).show();
public void onItemClick(AdapterView&?& parent, View view, int position, long id) {
mCursor.moveToPosition(position);
BOOK_ID = mCursor.getInt(0);
BookName.setText(mCursor.getString(1));
BookAuthor.setText(mCursor.getString(2));
public class BooksListAdapter extends BaseAdapter{
private Context mC
private Cursor mC
public BooksListAdapter(Context context,Cursor cursor) {
mContext =
public int getCount() {
return mCursor.getCount();
public Object getItem(int position) {
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
TextView mTextView = new TextView(mContext);
mCursor.moveToPosition(position);
mTextView.setText(mCursor.getString(1) + &___& + mCursor.getString(2));
return mTextV
第五步:运行程序效果如下:
第六步:查看我们所建的数据库。有两种方法:第一种用命令查看:adb shell ls data/data/com.android.tutor/databases。
另一种方法是用DDMS查看,在data/data下面对应的应用程序的包名 下会有如下数据库,如图所示:
如何用自已外部创建的数据库?
--- 共有 1 条评论 ---
外部数据库,你指的是手机上的数据库吗,还是服务器的?
有图有源码~~这样的代码分享看着才舒服
楼主,下面三个键都没显示啊,效果只有两个edittext啊
--- 共有 2 条评论 ---
: 按menu那里才有的
运行后,我也是这样的效果,只有上面两个EditText,下面三个都没有,listview也没显示
bjhgjhgjgjhghj
学习中,mark先
引用来自“西瓜可乐”的答案学习中,mark先好
谢谢分享!!!
新同学。。学习中。。。谢谢大师们分享啊
好像有错误啊Java Android手机程序演示对sqlite数据库增删改基本操作 - Java源码 - 数据库应用 - 源码天空
> 数据库应用 > Java Android手机程序演示对sqlite数据库增删改基本操作
&热门Java源码
Java Android手机程序演示对sqlite数据库增删改基本操作
资源等级:
上传会员:
资源类别:
¦数据库应用
文件大小:
原创作者:
发布时间:
网友评分:
0.0分 / 0次
下载次数:
Android手机应用程序,项目分层:MODEL,BLL,IDAL,DAL,Android,DAL层使用SQL参数形式,实现对SQLite数据库的列表显示,增删改常规操作。演示了android下对sqlite数据库的基本操作。支持数据库:SQLite,设计时数据类型请使用常用的类型,一个表的字段数量不要太多,务必自动增长列为主键。运行时注意将数据库文件导入sd卡。请看压缩包里的截图说明。
&&网友评论(共有2条)
&想起了毕业时候做的毕设,操作数据库的增删改查的操作
jakey525, 23:17:08
&我自己正在研究这个。正好可以借鉴一下。谢谢
jlfuly, 00:10:16
&&→&发表我的评论:
*字数限制500个字符(一个汉字占三个字符)
QQ技术交流群:编程乐园
(VB交流群) 3326898(Delphi交流群) (VC交流群)
版权所有 &
保留所有权力}

我要回帖

更多关于 java 项目启动时运行 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信