1、首先我们打开SQL Server数据库,新建一个测试数据库:
2、接下来需要下载SQL Server的JDBC驱动程序,如下图所示,驱动程序是一个Jar包文件:
3、打开Eclipse软件,右键选择New下面的Java Project选项。
4、在d出的新建Java Project界面中给项目起一个名字,选择合适的JRE版本:
5、在项目文件夹下面新建一个Java文件,接着将会在这个文件中进行数据库的连接:
6、运行java文件中的main函数,我们如果看到输出栏中显示连接数据库成功则代表配置完成。
双击rptdesign打开data explorer,
右键点Data Sources -> New Data Sources ->JDBC Data Source到Next
如果没有mysql-connector-java的包,请去下一个
>
[java] view plaincopy
UNEXPECTED TOP-LEVEL EXCEPTION:
javalangIllegalArgumentException: method ID not in [0, 0xffff]: 65536
at comandroiddxmergeDexMerger$6updateIndex(DexMergerjava:501)
at comandroiddxmergeDexMerger$IdMergermergeSorted(DexMergerjava:282)
at comandroiddxmergeDexMergermergeMethodIds(DexMergerjava:490)
at comandroiddxmergeDexMergermergeDexes(DexMergerjava:167)
at comandroiddxmergeDexMergermerge(DexMergerjava:188)
at comandroiddxcommanddexerMainmergeLibraryDexBuffers(Mainjava:439)
at comandroiddxcommanddexerMainrunMonoDex(Mainjava:287)
at comandroiddxcommanddexerMainrun(Mainjava:230)
at comandroiddxcommanddexerMainmain(Mainjava:199)
at comandroiddxcommandMainmain(Mainjava:103)
没错,你的应用中的Dex 文件方法数超过了最大值65536的上限,简单来说,应用爆棚了
那么让我们看一下为什么会引起这种错误:
在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多有Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。这里需要强调的是,Dex和Jar一样是一个归档文件,里面仍然是Java代码对应的字节码文件。当Android系统启动一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。但是在早期的Android系统中,DexOpt有一个问题,也就是这篇文章想要说明并解决的问题。DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个。当一个项目足够大的时候,显然这个方法数的上限是不够的。尽管在新版本的Android系统中,DexOpt修复了这个问题,但是我们仍然需要对低版本的Android系统做兼容
目前比较常用的方法:(1) 应用插件化,比如使用我正在参与开发的插件化框架 如果有建议或者相关的问题,欢迎到Github上积极参与 (2) 分割Dex,多工程: 把所需要的class文件或者是Jar文件和一些源码一起编译生成一个Jar文件。然后使用Android SDK提供的dx工具把Jar文件转成Dex文件。我们可以提前对它进行ODex *** 作,让它在被DexClassLoader加载的时候,跳过DexOpt的部分工作,从而加快加载的过程 这两种方法并不冲突,插件化除了解决应用爆棚,还有很多其他的优点,可以看我之前的文章,不再复述
当然,Google看来也意识到了目前应用方法数爆棚的问题, 目前在已经在API 21中提供了通用的解决方案,那就是android-support-multidexjar 这个jar包最低可以支持到API 4的版本(Android L及以上版本会默认支持mutidex)
让我们看一下如何应用android-support-multidexjar(以下都以在Anroid studio中的使用为例,使用eclipse开发需要安装gradle插件,其他基本上相同):
首先可以用--multi-dex配置(buildgradle)进行解决,生成的Apk中将包含多个dex文件,比如classesdex, classes2dex 如下,需要对buildgradle进行修改:
[java] view plaincopy
afterEvaluate {
tasksmatching {
itnamestartsWith('dex')
}each { dx ->
if (dxadditionalParameters == null) {
dxadditionalParameters = []
}
dxadditionalParameters += '--multi-dex' // enable multidex
// optional
// dxadditionalParameters += "--main-dex-list=$projectDir/<filename>"toString() // enable the main-dex-list
}
}
但是默认的Dalvik 类加载器只会寻找classesdex,所以需要将它们进行合并才能使得被识别
当然,现在有了androidsupportmultidexjar的支持,一切都会变得非常简单,首先我们看一下相关源码的目录,具体的原理分析我会在之后的文章中进行讲解:
[java] view plaincopy
android/support/multidex/BuildConfigclass
android/support/multidex/MultiDex$V14class
android/support/multidex/MultiDex$V19class
android/support/multidex/MultiDex$V4class
android/support/multidex/MultiDexclass
android/support/multidex/MultiDexApplicationclass
android/support/multidex/MultiDexExtractor$1class
android/support/multidex/MultiDexExtractorclass
android/support/multidex/ZipUtil$CentralDirectoryclass
android/support/multidex/ZipUtilclass
具体集成:
将如下配置加入工程 classPath中
[java] view plaincopy
repositories {
jcenter()
}
dependencies {
compile 'comgoogleandroid:multidex:01'
}
MultiDex实现原理:
Apk在运行的时候,有一个dexpathlist,而Multidex的源码中,会根据你的系统版本号对dexpathlist做修改,将所有的dex都添加到dexpathlist中
接下来集成有两个步骤:
一 从sdk\extras\android\support\multidex\library\libs 目录将android-support-multidexjar导入工程中
二 如果你的工程中已经含有Application类,那么让它继承androidsupportmultidexMultiDexApplication类,
如果你的Application已经继承了其他类并且不想做改动,那么还有另外一种使用方式,覆写attachBaseContext()方法:
[java] view plaincopy
public class MyApplication extends FooApplication {
@Override
protected void attachBaseContext(Context base) {
superattachBaseContext(base);
MultiDexinstall(this);
}
}
最后给出buildgradle中的完整配置:
[java] view plaincopy
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'comandroidtoolsbuild:gradle:0133'
classpath 'jpleafytreegradle:gradle-android-scala-plugin:11'
}
}
apply plugin: 'comandroidapplication'
apply plugin: 'jpleafytreeandroid-scala'
repositories {
jcenter()
}
android {
compileSdkVersion 21
buildToolsVersion '2102'
defaultConfig {
applicationId 'someapp'
minSdkVersion 19
targetSdkVersion 19
versionCode 1
versionName '10'
}
}
dependencies {
compile 'comgoogleandroid:multidex:01'
compile 'comandroidsupport:support-v4:1901'
compile 'comgoogleandroidgms:play-services:5077'
compile 'orgscala-lang:scala-library:2112'
compile 'orgscaloid:scaloid_211:34-10'
}
以上就是关于如何用eclipse连接sqlserver全部的内容,包括:如何用eclipse连接sqlserver、eclipse birt如何连接mysql数据库 配置文件、multidex支持库 eclipse怎么配置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)