todo系统需要数据库系统建立什么表

Java Web 项目,数据库建表_百度知道
Java Web 项目,数据库建表
建表条件,怎样建表,需要根据其网站样式建表,建表技巧,但我不会建表,请详细说明我现在在做一个Java Web项目,网上商城
不能简单就是见表吧?不是简单的create table吧 这个你需要看根据数据流程图来分析该如何做的。如果很简单的项目也可以create table的 例如create table a(aa char(2),bb varchar2(20),cc
date);alter table add
constraint pk_id1_t12
primary key(aa)你是要做数据库建模吧
其他类似问题
为您推荐:
其他4条回答
Java 使用executeUpdate向数据库中创建表格
一、创建mysql.ini文件,配置如下
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/select_test
pass=123456
这样以后修改数据库的配置直接在mysql.ini文件中修改。
二、编写代码
 initParam方法: 获得mysql.ini中的数据
createTale方法: 连接数据库,并且executeUpdate执行sql语句。此例的sql文件为创建表语句。
 main方法: 传入Sql语句。
class ExecuteDDL {
public void initParam(String paramFile) throws Exception {
要看你使用的是什么数据库了。sql2005的话。建表语句:create table 表名 ( )上百度文库搜索数据库sql语句大全。
这个。。。。那个。。。。你根据界面来建数据结构吗。。。。。先把需求梳理好,再考虑建表的事儿吧。至于建表语句,给你个链接,学习下sql吧: 望采纳
这个是数据库的知识。。你没学数据库???、
java的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁7081人阅读
一,创建一个公共的DBA
为了在整个程序运行期间调用该公共的数据库,我们定义了一个扩展自Application的CommDB类:
1,创建唯一的数据库:
1 public class CommDB {
public static final String DATABASE_NAME = &myDatabase&; //数据库名称
public static final int DATABASE_VERSION = 1;
//创建该数据库下学生表的语句
private static final String CREATE_TABLE_Students =
&CREATE TABLE if not exists & + StudentDB.SQLITE_TABLE + & (& +
StudentDB.KEY_ROWID + & integer PRIMARY KEY autoincrement,& +
StudentDB.KEY_AGE + &,& +
StudentDB.KEY_GENDER + &,& +
StudentDB.KEY_NAME + &,& +
& UNIQUE (& + StudentDB.KEY_NAME +&));&;//暂时规定不能重名
//创建该数据库下教师表的语句
private static final String CREATE_TABLE_Teachers =
&CREATE TABLE if not exists & + TeacherDB.SQLITE_TABLE + & (& +
TeacherDB.KEY_ROWID + & integer PRIMARY KEY autoincrement,& +
TeacherDB.KEY_AGE + &,& +
TeacherDB.KEY_GENDER + &,& +
TeacherDB.KEY_NAME + &,& +
& UNIQUE (& + TeacherDB.KEY_AGE +&));&;
private final C
private DatabaseHelper DBH
private SQLiteD
* Constructor
* @param ctx
public CommDB(Context ctx)
this.context =
this.DBHelper = new DatabaseHelper(this.context);
private static class DatabaseHelper extends SQLiteOpenHelper
DatabaseHelper(Context context)
super(context, DATABASE_NAME, null, DATABASE_VERSION);
public void onCreate(SQLiteDatabase db)
db.execSQL(CREATE_TABLE_Students);//创建学生表
db.execSQL(CREATE_TABLE_Teachers);//创建教师表
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
// Adding any table mods to this guy here
* open the db
* @return this
* @throws SQLException
* return type: DBAdapter
public CommDB open() throws SQLException
this.db = this.DBHelper.getWritableDatabase();
return this;
* close the db
* return type: void
public void close()
this.DBHelper.close();
2,在app开始运行时,创建上述的数据库,并创建对应的数据表:
1 public class GApplication extends Application {
private CommDB comDBH
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
comDBHelper = new CommDB(this);
comDBHelper.open();
二,分别创建对应的数据表;
1,建立学生数据表类:
public class StudentDB {
public static final String KEY_ROWID = &_id&;
public static final String KEY_AGE = &age&;
public static final String KEY_GENDER = &gender&;
public static final String KEY_NAME = &name&;
private static final String TAG = &StudentDbAdapter&;
private DatabaseHelper mDbH
private SQLiteDatabase mDb;
// private static final String DATABASE_NAME = &Fortrun_Ticket11&;
static final String SQLITE_TABLE = &StudentTable&;
private final Context mC
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, CommDB.DATABASE_NAME, null, CommDB.DATABASE_VERSION);
public void onCreate(SQLiteDatabase db) {
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, &Upgrading database from version & + oldVersion + & to &
+ newVersion + &, which will destroy all old data&);
db.execSQL(&DROP TABLE IF EXISTS & + SQLITE_TABLE);
onCreate(db);
public StudentDB(Context ctx) {
this.mCtx =
public StudentDB open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
public void close() {
if (mDbHelper != null) {
mDbHelper.close();
* 创建学生表的字段
* @param age
* @param gender
* @param name
public long createStudent(String age, String gender, String name) {
long createResult = 0;
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_AGE, age);
initialValues.put(KEY_GENDER, gender);
initialValues.put(KEY_NAME, name);
createResult = mDb.insert(SQLITE_TABLE, null, initialValues);
} catch (Exception e) {
// TODO: handle exception
return createR
* 删除表的全部字段数据
public boolean deleteAllStudents() {
int doneDelete = 0;
doneDelete = mDb.delete(SQLITE_TABLE, null, null);
Log.w(TAG, Integer.toString(doneDelete));
Log.e(&doneDelete&, doneDelete + &&);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return doneDelete & 0;
* 根据名称删除表中的数据
* @param name
public boolean deleteTicketByName(String name) {
String[] tN
tName = new String[] { name };
isDelete = mDb.delete(SQLITE_TABLE, KEY_AGE + &=?&, tName);
Log.e(&deleteTicket&, &isDelete:& + isDelete + &||& + &ticketID=&
+ name);
return isDelete & 0;
public void insertSomeTickets() {
* 获取表中的所有字段
public ArrayList&Student& fetchAll() {
ArrayList&Student& allTicketsList = new ArrayList&Student&();
Cursor mCursor = null;
mCursor = mDb.query(SQLITE_TABLE, new String[] { KEY_ROWID, KEY_AGE,
KEY_GENDER, KEY_NAME }, null, null, null, null, null);
if (mCursor.moveToFirst()) {
Student st = new Student();
st.setAge(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_AGE)));
st.setGender(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_GENDER)));
st.setName(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_NAME)));
allTicketsList.add(st);
} while (mCursor.moveToNext());
if (mCursor != null && !mCursor.isClosed()) {
mCursor.close();
return allTicketsL
2,创建教师数据表类:
public class TeacherDB {
public static final String KEY_ROWID = &_id&;
public static final String KEY_AGE = &age&;
public static final String KEY_GENDER = &gender&;// 还要保留
public static final String KEY_NAME = &name&;
private static final String TAG = &TeacherDbAdapter&;
private DatabaseHelper mDbH
private SQLiteDatabase mDb;
// private static final String DATABASE_NAME = &Fortrun_Ticket11&;
static final String SQLITE_TABLE = &TeacherTable&;
private static final int DATABASE_VERSION = 1;
private final Context mC
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, CommDB.DATABASE_NAME, null, CommDB.DATABASE_VERSION);
public void onCreate(SQLiteDatabase db) {
// Log.w(TAG, DATABASE_CREATE);
// db.execSQL(DATABASE_CREATE);
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, &Upgrading database from version & + oldVersion + & to &
+ newVersion + &, which will destroy all old data&);
db.execSQL(&DROP TABLE IF EXISTS & + SQLITE_TABLE);
onCreate(db);
public TeacherDB(Context ctx) {
this.mCtx =
public TeacherDB open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
public void close() {
if (mDbHelper != null) {
mDbHelper.close();
public long createTeacher(String age, String gender, String name) {
long createResult = 0;
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_AGE, age);
initialValues.put(KEY_GENDER, gender);
initialValues.put(KEY_NAME, name);
createResult = mDb.insert(SQLITE_TABLE, null, initialValues);
} catch (Exception e) {
// TODO: handle exception
return createR
public boolean deleteAllTeachers() {
int doneDelete = 0;
doneDelete = mDb.delete(SQLITE_TABLE, null, null);
Log.w(TAG, Integer.toString(doneDelete));
Log.e(&doneDelete&, doneDelete + &&);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return doneDelete & 0;
public boolean deleteTeacherByName(String name) {
String[] tN
tName = new String[] { name };
isDelete = mDb.delete(SQLITE_TABLE, KEY_AGE + &=?&, tName);
Log.e(&deleteTicket&, &isDelete:& + isDelete + &||& + &ticketID=&
+ name);
return isDelete & 0;
public void insertSomeTickets() {
// 扫描时进行判断本地数据库是否有此ticketID
public ArrayList&Teacher& fetchAll() {
ArrayList&Teacher& allTeacherList = new ArrayList&Teacher&();
Cursor mCursor = null;
mCursor = mDb.query(SQLITE_TABLE, new String[] { KEY_ROWID, KEY_AGE,
KEY_GENDER, KEY_NAME }, null, null, null, null, null);
if (mCursor.moveToFirst()) {
Teacher st = new Teacher();
st.setAge(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_AGE)));
st.setGender(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_GENDER)));
st.setName(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_NAME)));
allTeacherList.add(st);
} while (mCursor.moveToNext());
if (mCursor != null && !mCursor.isClosed()) {
mCursor.close();
return allTeacherL
三,调用public&class&ShowActivity&extends&Activity
private StudentDB studentDB;
private TeacherDB teacherDB;
private List&Student& stList = new ArrayList&Student&();
private List&Teacher& trList = new ArrayList&Teacher&();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
studentDB = new StudentDB(this);
studentDB.open();
teacherDB = new TeacherDB(this);
teacherDB.open();
studentDB.createStudent(&28&, &男&, &阿武&);
studentDB.createStudent(&24&, &女&, &小铃&);
teacherDB.createTeacher(&40&, &男&, &何SIR&);
teacherDB.createTeacher(&45&, &女&, &MRS谢&);
stList = studentDB.fetchAll();
trList = teacherDB.fetchAll();
for (int i = 0; i & stList.size(); i++) {
Log.e(&stList value&, stList.get(i).getName());
for (int i = 0; i & trList.size(); i++) {
Log.e(&trList value&, trList.get(i).getName());
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (studentDB != null) {
studentDB.close();
if (teacherDB != null) {
teacherDB.close();
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.show, menu);
return true;
四,结果验证;
10-25 16:50:10.321: E/stList value(3953): 阿武
10-25 16:50:10.321: E/stList value(3953): 小铃
10-25 16:50:10.321: E/trList value(3953): 何SIR
10-25 16:50:10.321: E/trList value(3953): MRS谢
五,注意事项:
此例子中插入数据库的数据是以年龄作为唯一字段,当插入的数据中,年龄字段有重复时,数据库会报错,此例子只为说明如何在一个数据库中建立多张表,因此,在实际项目中,一般以某个实体的ID作为唯一字段,且插入前必须经过判断;
另外,数据库的关闭,我们选择在onDestroy()方法中调用。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:194560次
积分:2483
积分:2483
排名:第9420名
原创:42篇
转载:151篇
评论:28条
(1)(6)(10)(1)(2)(5)(5)(5)(28)(15)(7)(5)(10)(3)(6)(7)(1)(1)(4)(9)(7)(3)(1)(3)(2)(8)(15)(1)(23)从.NET网页开发入门,接触过SAP和Android开发。关注企业信息化,目前从事PeopleSoft Technical Consultant。
Android数据库&
一、关系型数据库SQLIte
  每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库&SQLite。SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了。SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用SQLite来存储数据的。
SQLite体系结构图如下:
  编译器包括Tokenizer(词法分析器)、 Parser(语法分析器)、Code Generator(代码产生器)。他们协同处理文本形式的结构化查询语句。
  后端由B-tree,Pager,OS Interface组成。B-tree的职责是负责排序,维护多个数据库页之间错综复杂的关系,将页面组织成树状结构,页面就是树的叶子。Pager负责传输,根据B-tree的请求从磁盘读取页面或者写入页面。
  公共服务中有各种实用的功能比如:内存分配、字符串比较,Unicode转换等。
&SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征:
SQLite和C\S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。
SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要&安装&,所以在使用的时候能够省去不少麻烦。
SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。
SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。
5、多语言接口
SQLite数据库支持很多语言编程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。
SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
SQLite官方网站(),了解更多内容请前往。
二、导出查看数据库文件
  在android中,为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于Android设备/data/data/package_name/databases文件夹中。
  想要将数据库文件导出可以使用eclipse,如图所示:
  查看数据库,使用SQlite Database Browser,如图所示:
三、扩展类
3.1扩展SQLiteOpenHelper
  Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:
  构造函数,调用父类 SQLiteOpenHelper 的构造函数
  onCreate()方法;// TODO 创建数据库后,对数据库的操作
  onUpgrage()方法。// TODO 更改数据库版本的操作
  当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。
  操作数据库的最佳实践是创建一个辅助类,例如联系人模块
  class ContactsDatabaseHelper extends SQLiteOpenHelper
3.2 Cursor类
  Android使用Cursor类返回一个需要的值,Cursor作为一个指针从数据库查询返回结果集,使用Cursor允许Android更有效地管理它们需要的行和列,你使用ContentValues对象存储键/值对,它的put()方法允许你插入不同数据类型的键值。
3.3 数据类型
  SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为&弱类型&(manifest typing.)。
四、数据库操作
4.1创建和打开数据库
  在Android中创建和打开一个数据库都可以使用openOrCreateDatabase方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,如果不存在则创建一个数据库:创建成功则返回一个SQLiteDatebase对象,否则抛出异常FileNotFoundException。
下面我们来创建一个名为Test的数据库,并返回一个SQLiteDatabase对象mSQLiteDatabase。
mSQLiteDatabase=this.openOrCreateDatabase("Test",MODE_PRIVATE,null);
  通过execSQL方法来执行一条SQL语句。
String CREATE_TABLE="create table 表名(列名,列名,&&)";
mSQLiteDatabase.execSQL(CREATE_TABLE);
  创建表的时候总要确定一个主键,这个字段是64位整型,别名_rowid。其特点就是自增长功能。当到达最大值时,会搜索该字段未使用的值(某些记录被删除_rowid会被回收),所以要唯一严格增长的自动主键必须加入关键字autoincrement。
mSQLiteDatabase("drop table 表名");
4.4修改数据
4.4.1 插入记录
可以使用insert方法来添加数据,但是insert方法要求把数据都打包到ContentValues中,ContentValues其实就是一个Map,Key值是字段名称,Value值是字段的值。通过ContentValues的put方法就可以把数据放到ContentValues对象中,然后插入到表中去。具体实现如下:
ContentValues cv=new ContentValues();
cv.put(TABLE_NUM,1);
cv.put(TABLE_DATA,"测试数据库数据");
mSQLiteDatabase.insert(Test,null,cv);
//同样可以使用execSQL方法来执行一条&插入&的SQL语句
String INSERT_DATA="insert into 表名(列名,&&) values (值,&&)";
mSQLiteDatabase.execSQL(INSERT_DATA);
4.4.2 更新记录
ContentValues cv=new ContentValues();
cv.put(TABLE_NUM,3);
cv.put(TABLE_DATA,"修改后数据");
mSQLiteDatabase.update(Test,cv,"num"+"="+rowId,null);
//同样可以使用execSQL方法来执行一条&更新&的SQL语句
String UPDATE_DATA="update 表名 set 列名=xxx where xxx;
mSQLiteDatabase.execSQL(UPDATE_DATA);
update 表名 set 列名=xxx [where条件]
4.4.3 删除记录
//要删除数据可以使用delete方法
mSQLiteDatabase.delete("Test","WHERE _id="+0,null);
//也可以通过execSQL方法执行SQL语句删除数据
mSQLiteDatabase.execSQL("delete from 表名 where 条件");
SELECT 列名 FROM 表名 WHERE 条件
例如在联系人中保存3个联系人,data表如下:
查询data1值为10086的项
对查询条件和返回值稍做修改
LIKE的使用
Like经常和 %或者 _ 搭配使用。
%可与任意0个或者多个字符匹配,_可与任意单个字符匹配。
GLOB的使用
Glob与like非常相似,常与 * 搭配。
限定和排序
关键字:order、limit、offset。
Order分为asc(默认升序),desc(降序)。
内连接:通过表中两个字段进行连接,找出两个集合的交集。
& select& xxx from 表名1 inner join 表名2 on 表名1.列名 = 表名2.列名
左外连接:左表的所有项和内连接项。
& select& xxx from 表名1 left outer join 表名2 on 表名1.列名 = 表名2.列名
五、高级特性
  视图是虚拟表,它的内容都派生自其它表的查询结果。虽然它看起来像基本表,但是它不是,因为基本表的内容是持久的,而视图的内容是使用时动态产生的。
  create view 表名 as 定义
  索引是一种用来在某种条件下加速查询的结构。
  create index 索引名 on 表名(列名)
5.3 触发器
  触发器的作用是当具体的表发生特定的数据事件时,执行对应的操作。
  create trigger 触发器名 [before|after] [insert|delete|update|update of columns] on 表名 action
首先还谢谢是提供底稿的同事,这里只是介绍了基础的东西,感兴趣的同学,请SQLite官方网站()了解。
这里提供一个博客园的博客
具体地址:
其中的评论说道:
有两点需要注明一下:1. data/data这个目录是需要root权限的;2. adb shell进入手机后,不是每个手机都能找到sqlite3这个命令的。至少说我们拿到的工程样机里面就没有。
阅读(...) 评论()你所知道的数据库有哪些?各有什么优缺点?_百度知道
你所知道的数据库有哪些?各有什么优缺点?
表级和列级的权限、MySQL在权限系统上比PostgreSQL某些方面更为完善,MySQL在以前的文档中也曾经说过并不准备支持事务和触发器。PostgreSQL在Windows下运行没有MySQL稳定。对于列级的权限;DELETE的授权,这是因为你必须每隔一段时间运行一次VACUUM,但是在很多时候.0。MySQL还允许你指定基于主机的权限;Win2000&#47。 3;7运行,这是有用的,PostgreSQL可以通过建立视图.2-alpha已经开始支持事务、与PostgreSQL相比,而且在MySQL的TODO中,而MySQL允许你定义一整套的不同的数据级,因为MySQL保留无事务的表类型。 4。 9、MySQL的myisampack可以对只读表进行压缩、MySQL使用了线程。PostgreSQL目前仍不完全适应24&#47,而PostgreSQL使用的是进程,我们看到MySQL 4、约束这样的注定会降低速度的功能也列入了日程。相反,此后仍然可以直接访问该表中的行,是一个服务);7运行、MySQL的主要优点 1。MySQL作为一个本地的Windows应用程序运行(在NT&#47。MySQL自已也宣称速度是他们追求的主要目标之一,MySQL将有可能一直保持速度的优势,基于这个原因、MySQL可以适应24&#47,流行意味着更多的用户。这就为用户提供了更多的选择、意味着更多。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多,应该是可以想象的,这对于目前的PostgreSQL是无法实现的。 5、MySQL比PostgreSQL更流行,流行对于一个商业软件来说,并确定视图的权限来弥补,因此事务对于MySQL不再仅仅成为劣势。但是在最新的文档中,对触发器,意味着更好的商业支持、MySQL的MERGE表提供了一个独特管理多个表的方法,也是一个很重要的指标四,MySQL通常要比PostgreSQL快得多、由于MySQL 4。 8、SELECT和UPDATE&#47,而PostgreSQL是运行在Cygwin模拟环境下。 6,我们仍然有理由相信、首先是速度、更完善的文档资料,意味着经受了更多的考验;WinXP下。 7。在绝大多数情况下,MySQL更适宜在Windows环境下运行。PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的INSERT.2-alpha开始支持事务的概念.0,你不需要为MySQL运行任何清除程序。 2。但是
其他类似问题
为您推荐:
数据库的相关知识
其他1条回答
MYSQL,优点很多,缺点不知道
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 数据库系统工程师 的文章

更多推荐

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

点击添加站长微信