From 4a707b85d59cffcc2cdfc867fbe6c89ff3ac9c68 Mon Sep 17 00:00:00 2001 From: Dai Date: Wed, 30 Jun 2021 12:30:34 +0800 Subject: [PATCH] DataBase --- src/.idea/compiler.xml | 2 +- src/.idea/gradle.xml | 2 + src/.idea/misc.xml | 2 +- src/.idea/runConfigurations.xml | 10 --- src/DataBase/.gitignore | 1 + src/DataBase/build.gradle | 38 ++++++++++ src/DataBase/consumer-rules.pro | 0 src/DataBase/proguard-rules.pro | 21 ++++++ .../database/ExampleInstrumentedTest.java | 26 +++++++ src/DataBase/src/main/AndroidManifest.xml | 5 ++ .../DatabaseHelper/CourseSQLHelper.java | 33 +++++++++ .../DatabaseHelper/ScheduleSQLHelper.java | 39 +++++++++++ .../com/showme/database/MySQLiteDatabase.java | 12 ++++ .../showme/database/utils/CourseSQLUtils.java | 10 +++ .../database/utils/ScheduleSQLUtils.java | 69 +++++++++++++++++++ .../com/showme/database/ExampleUnitTest.java | 17 +++++ src/app/build.gradle | 2 + src/settings.gradle | 1 + 18 files changed, 278 insertions(+), 12 deletions(-) delete mode 100644 src/.idea/runConfigurations.xml create mode 100644 src/DataBase/.gitignore create mode 100644 src/DataBase/build.gradle create mode 100644 src/DataBase/consumer-rules.pro create mode 100644 src/DataBase/proguard-rules.pro create mode 100644 src/DataBase/src/androidTest/java/com/showme/database/ExampleInstrumentedTest.java create mode 100644 src/DataBase/src/main/AndroidManifest.xml create mode 100644 src/DataBase/src/main/java/com/showme/database/DatabaseHelper/CourseSQLHelper.java create mode 100644 src/DataBase/src/main/java/com/showme/database/DatabaseHelper/ScheduleSQLHelper.java create mode 100644 src/DataBase/src/main/java/com/showme/database/MySQLiteDatabase.java create mode 100644 src/DataBase/src/main/java/com/showme/database/utils/CourseSQLUtils.java create mode 100644 src/DataBase/src/main/java/com/showme/database/utils/ScheduleSQLUtils.java create mode 100644 src/DataBase/src/test/java/com/showme/database/ExampleUnitTest.java diff --git a/src/.idea/compiler.xml b/src/.idea/compiler.xml index fb7f4a8..659bf43 100644 --- a/src/.idea/compiler.xml +++ b/src/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/.idea/gradle.xml b/src/.idea/gradle.xml index f667072..e9d2c33 100644 --- a/src/.idea/gradle.xml +++ b/src/.idea/gradle.xml @@ -12,10 +12,12 @@ diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml index 860da66..df8860d 100644 --- a/src/.idea/misc.xml +++ b/src/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/src/.idea/runConfigurations.xml b/src/.idea/runConfigurations.xml deleted file mode 100644 index 797acea..0000000 --- a/src/.idea/runConfigurations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/DataBase/.gitignore b/src/DataBase/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/src/DataBase/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/src/DataBase/build.gradle b/src/DataBase/build.gradle new file mode 100644 index 0000000..59a44e2 --- /dev/null +++ b/src/DataBase/build.gradle @@ -0,0 +1,38 @@ +plugins { + id 'com.android.library' +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + minSdkVersion 29 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.2.1' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' +} \ No newline at end of file diff --git a/src/DataBase/consumer-rules.pro b/src/DataBase/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/src/DataBase/proguard-rules.pro b/src/DataBase/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/src/DataBase/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/src/DataBase/src/androidTest/java/com/showme/database/ExampleInstrumentedTest.java b/src/DataBase/src/androidTest/java/com/showme/database/ExampleInstrumentedTest.java new file mode 100644 index 0000000..bae200b --- /dev/null +++ b/src/DataBase/src/androidTest/java/com/showme/database/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.showme.database; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.showme.database.test", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/src/DataBase/src/main/AndroidManifest.xml b/src/DataBase/src/main/AndroidManifest.xml new file mode 100644 index 0000000..00f3ade --- /dev/null +++ b/src/DataBase/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/src/DataBase/src/main/java/com/showme/database/DatabaseHelper/CourseSQLHelper.java b/src/DataBase/src/main/java/com/showme/database/DatabaseHelper/CourseSQLHelper.java new file mode 100644 index 0000000..0cb3208 --- /dev/null +++ b/src/DataBase/src/main/java/com/showme/database/DatabaseHelper/CourseSQLHelper.java @@ -0,0 +1,33 @@ +package com.showme.database.DatabaseHelper; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +public class CourseSQLHelper extends SQLiteOpenHelper { + private static final String db_name = "course";//自定义的数据库名; + private static final int version = 2;//版本号 + + public CourseSQLHelper(Context context) { + super(context, db_name, null, version); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("create table courses(" + + "id integer primary key autoincrement," + + "course_name text," + + "teacher text," + + "class_room text," + + "day integer," + + "class_start integer," + + "class_end integer," + + "weeks text)"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.execSQL("drop table if exists schedules"); + onCreate(db); + } +} \ No newline at end of file diff --git a/src/DataBase/src/main/java/com/showme/database/DatabaseHelper/ScheduleSQLHelper.java b/src/DataBase/src/main/java/com/showme/database/DatabaseHelper/ScheduleSQLHelper.java new file mode 100644 index 0000000..5675034 --- /dev/null +++ b/src/DataBase/src/main/java/com/showme/database/DatabaseHelper/ScheduleSQLHelper.java @@ -0,0 +1,39 @@ +package com.showme.database.DatabaseHelper; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +public class ScheduleSQLHelper extends SQLiteOpenHelper { + private static final String db_name = "MySchedule";//自定义的数据库名; + private static final int version = 98889;//版本号 + + public ScheduleSQLHelper(Context context) { + super(context, db_name, null, version); + } + + // 该方法会自动调用,首先系统会检查该程序中是否存在数据库名为‘MySchedule’的数据库 + // 如果存在则不会执行该方法,如果不存在则会执行该方法。 + @Override + public void onCreate(SQLiteDatabase db) { + String sql = "create table schedules(" + + "id Integer primary key autoincrement," + //id自增,只支持integer不支持int + "scheduleName varchar(50)," + + "schedulePlace varchar(50)," + + "ifSchedulePlace integer," + + "startTime varchar(50)," + + "ifStartTime integer," + + "endTime varchar(50)," + + "ifEndTime interger," + + "time varchar(30)" + + ")"; + db.execSQL(sql); + } + + //数据库版本更新时执行该方法,如果表已存在则先删除再调用onCreate重新创建 + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.execSQL("drop table if exists schedules"); + onCreate(db); + } +} diff --git a/src/DataBase/src/main/java/com/showme/database/MySQLiteDatabase.java b/src/DataBase/src/main/java/com/showme/database/MySQLiteDatabase.java new file mode 100644 index 0000000..449c661 --- /dev/null +++ b/src/DataBase/src/main/java/com/showme/database/MySQLiteDatabase.java @@ -0,0 +1,12 @@ +package com.showme.database; + +import android.database.sqlite.SQLiteDatabase; + +public class MySQLiteDatabase { + public static SQLiteDatabase scheduleSQL; + + public static SQLiteDatabase courseSQL; + + public static SQLiteDatabase zoneSQL; + +} diff --git a/src/DataBase/src/main/java/com/showme/database/utils/CourseSQLUtils.java b/src/DataBase/src/main/java/com/showme/database/utils/CourseSQLUtils.java new file mode 100644 index 0000000..2dbedd6 --- /dev/null +++ b/src/DataBase/src/main/java/com/showme/database/utils/CourseSQLUtils.java @@ -0,0 +1,10 @@ +package com.showme.database.utils; + +import android.database.sqlite.SQLiteDatabase; + +import com.showme.database.MySQLiteDatabase; + +public class CourseSQLUtils { + private static SQLiteDatabase courseSQL = MySQLiteDatabase.courseSQL; + +} diff --git a/src/DataBase/src/main/java/com/showme/database/utils/ScheduleSQLUtils.java b/src/DataBase/src/main/java/com/showme/database/utils/ScheduleSQLUtils.java new file mode 100644 index 0000000..1be1168 --- /dev/null +++ b/src/DataBase/src/main/java/com/showme/database/utils/ScheduleSQLUtils.java @@ -0,0 +1,69 @@ +package com.showme.database.utils; + +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import com.showme.database.MySQLiteDatabase; + +import java.util.ArrayList; +import java.util.List; + +public class ScheduleSQLUtils { + private static SQLiteDatabase database = MySQLiteDatabase.scheduleSQL; + + public static List queryByDate(String date) { + //columns为null 查询所有列 + List res = new ArrayList<>(); + String aScheduleName; + Cursor cursor = database.query("schedules",null,"time=?",new String[]{date},null,null,null); + if(cursor.moveToFirst()){ + int scheduleCount = 0; + do{ + aScheduleName = cursor.getString(cursor.getColumnIndex("scheduleName")); + String aStartTime = cursor.getString(cursor.getColumnIndex("startTime")); + Integer ifStartTime = cursor.getInt(cursor.getColumnIndex("ifStartTime")); + String aEndTime = cursor.getString(cursor.getColumnIndex("endTime")); + Integer ifEndTime = cursor.getInt(cursor.getColumnIndex("ifEndTime")); + String scheduleText = aScheduleName; + + if(ifStartTime == 1){ + scheduleText += "($时间:"+aStartTime; + + if(ifEndTime ==1){ + scheduleText += "\n"+aEndTime; + } else { + scheduleText += "\n24:00"; + } + } else { + scheduleText += "($时间: 00:00\n24:00"; + } + + scheduleCount++; + res.add(scheduleText); + }while (cursor.moveToNext()); + } + cursor.close(); + return res; + } + + public static String extractScheduleName(String scheduleText) { + int index = scheduleText.indexOf("($时间:"); + if (index != -1) { + return scheduleText.substring(0, index); + } + return null; + } + + public static String extractScheduleTime(String scheduleText) { + int index = scheduleText.indexOf("($时间:"); + if (index != -1) { + return scheduleText.substring(index+5); + } + return null; + } + + public static boolean isScheduleMarked(String date) { + Cursor cursor = database.query("schedules",null,"time=?",new String[]{date},null,null,null); + return cursor.moveToFirst(); + } +} diff --git a/src/DataBase/src/test/java/com/showme/database/ExampleUnitTest.java b/src/DataBase/src/test/java/com/showme/database/ExampleUnitTest.java new file mode 100644 index 0000000..c1baaf0 --- /dev/null +++ b/src/DataBase/src/test/java/com/showme/database/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.showme.database; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/src/app/build.gradle b/src/app/build.gradle index 35b7146..54865af 100644 --- a/src/app/build.gradle +++ b/src/app/build.gradle @@ -33,6 +33,8 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation project(path: ':CalendarView') + implementation project(path: ':DataBase') testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/src/settings.gradle b/src/settings.gradle index 577b904..26cb0a3 100644 --- a/src/settings.gradle +++ b/src/settings.gradle @@ -1,3 +1,4 @@ +include ':DataBase' include ':app' rootProject.name = "My Application" include ':CalendarView'